我正在实施van Emde Boas树,并且遇到了在构造函数中使用递归非常有用的情况。在构造函数中使用递归是不好的做法?
当我在树中创建根节点时,该节点将具有指向许多其他节点的指针,并且这些节点将指向许多其他节点,依此类推。即使这些数据是空数据,我仍然希望他们都在那里。
编辑:在回答评论时,我认为这可能是不好的做法,因为我们在分配内存时总是需要小心。在这种情况下,用户可能不知道分配新节点可能会产生的效果,因此他们可能会分配更多的内存,然后他们打算这么做?除此之外,我认为在构造函数中分配内存似乎很奇怪/很危险。
该代码以递归方式创建新节点,直到创建完整的树为止。这是一种不好的做法吗?如果是的话,有没有更好的方式在Java中做到这一点?
//Constructor
public VEBNode(int universeSize)
{
this.universeSize = universeSize;
min = vEBTree.NULL;
max = vEBTree.NULL;
if(universeSize <= 2)
{
summary = null;
cluster = null;
}
else
{
int childUnivereSize = (int)Math.sqrt(universeSize);
summary = new VEBNode(childUnivereSize);
cluster = new VEBNode[childUnivereSize];
for(int i = 0; i < childUnivereSize; i++)
{
cluster[i] = new VEBNode(childUnivereSize);
}
}
}
你为什么认为这可能是一个不好的做法? –
在您的位置,我可能会保持构造函数非常基本,并将所有这些逻辑移至静态工厂方法,但这是一种风格判断调用。 –
我认为递归是相当适合你的情况的方式,无论是构造函数还是其他函数。 – skuntsel