Каковы возможные причины StackOverflowError в рекурсивной функции для подсчета размера дереваJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Каковы возможные причины StackOverflowError в рекурсивной функции для подсчета размера дерева

Сообщение Anonymous »

Итак, я хотел решить следующую проблему:
Дано неориентированное дерево с n узлами, помеченными от 0 до n-1, с корнем в узле 0, и ребрами массива, где ребра = [ai, bi ] указывает ребро между узлами ai и bi, вам необходимо вернуть количество «хороших» узлов. Узел считается «хорошим», если все поддеревья, коренящиеся в его дочерних узлах, имеют одинаковый размер. Поддерево состоит из узла и всех его потомков.
В настоящее время я использую следующий метод для расчета размера поддеревьев, но сталкиваюсь с ошибкой StackOverflowError:

Код: Выделить всё

public int countSize(ArrayList nodes, Node node) {
int k = 0;
ArrayList children = node.children;

if (children.size() == 0) {
return 0;
} else for (int j = 0; j < children.size(); j++) {
k++;
int b = children.get(j);
Node m = findNodeByName(nodes, b);
int y = countSize(nodes, m);
k = k + y;
}
return k;
}
Я не понимаю, почему она должна возвращать StackOverflow, потому что я не понимаю, как эта рекурсивная функция может бесконечно зависать, если это дерево ненаправлено и, следовательно, не может иметь циклов, и если у узла нет дочерних элементов, он возвращает 0 и метод останавливается.
Можете ли вы помочь понять, в чем проблема, и предложить способы ее решения?

Подробнее здесь: https://stackoverflow.com/questions/790 ... unction-to
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»