вот мое дерево класс узел:ява п-арной глубина дерева
public class Generalization extends Class_object {
private List<Generalization> superClasses;
private List<Generalization> subClasses;
public boolean isRoot() {
return superClasses.size() == 0;
}
public boolean isLeaf() {
return subClasses.size() == 0;
}
// path length to root
public String getDIT() {
return Integer.toString(recuDIT(this));
}
public int recuDIT(Generalization g) {
if (g.isRoot())
return 0;
else {
int maxLength = 0;
for (Generalization gen : superClasses) {
maxLength = Math.max(maxLength, recuDIT(gen));
}
return maxLength + 1;
}
}
// path length to leaf
public String getCLD() {
return Integer.toString(recuCLD(this));
}
public int recuCLD(Generalization g) {
if (g.isLeaf())
return 0;
else {
int maxLength = 0;
for (Generalization gen : subClasses) {
maxLength = Math.max(maxLength, recuCLD(gen));
}
return maxLength + 1;
}
}
}
каждый узел имеет свой родительский узел и дочерний узел. Но когда я выполняю программу, она дает мне stackoverflowerror как в рекурсивной функции (CLD, так и DIT). Может ли кто-нибудь сказать мне, почему они петля бесконечно? Спасибо.
Похоже, вы всегда начинаете с того же места. Вы должны двигаться вперед со списком. Прямо сейчас вы всегда переходите к первому объекту в списке и вызываете рекурсивный вызов, который делает то же самое – ola