Я внедряю деревья Van Emde Boas, и я столкнулся с ситуацией, когда использование рекурсии в конструкторе невероятно полезно.Плохая практика использования рекурсии в конструкторе?
Когда я создаю корневой узел в дереве, этот узел будет иметь указатели на многие другие узлы, и эти узлы будут указывать на многие другие узлы и т. Д. Даже если они инициализированы нулевыми данными, я все равно хочу, чтобы они были там.
EDIT: В ответ на комментарий, я думал, что это может быть плохая практика, потому что мы всегда должны быть осторожны при распределении памяти. В этом случае пользователь может не знать о том, какие эффекты могут быть назначены для нового такого узла, и поэтому они могут выделять больше памяти, чем они предполагали? Другое то, что мне кажется, что просто выделить/опасно выделять память в конструкторе.
Код рекурсивно создает новые узлы, пока не будет создано полное дерево. Это плохая практика? Если это лучший способ сделать это на 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