Может кто-нибудь помочь мне объяснить, почему это заканчивается бесконечным циклом рекурсии?
Переменная длина достигает значения 1, но по какой-то причине цикл все еще вводится, хотя условие цикла является(длина> 1).
Я пробовал печатать значения и запускать их снова и снова, возможно, я упускаю что-то более очевидное или кто-то может объяснить это более просто.Спасибо.
public static void main(String[] args) {
xMethod(5);
}
public static void xMethod(int length) {
while (length > 1) {
System.out.print((length - 1) + " ");
xMethod(length - 1);
}
}
Дополнительная информация.
Когда я дублировал этот код:
public static void main(String[] args) {
xMethod(5);
}
public static void xMethod(int length) {
while (length > 1) {
System.out.print((length - 1) + " ");
xMethod(length - 1);
}
System.out.println("Coming out of while");
}
Ниже вывод:
4 3 2 1 Coming out of while
1 Coming out of while
1 Coming out of while
1 Coming out of while
1 Coming out of while
1 Coming out of while
1 Coming out of while
//repeated Infinite times
После выхода из цикла while
, почему он возвращается в тот же цикл while
с length
как 2?
Редактировать: Я ценю все ваши ответы и понимаю, что еслиЯ хотел закодировать что-то вроде этого, я, вероятно, использовал бы оператор if, как это делают большинство рекурсивных методов, но это просто вопрос меня, возможно, не понимающего, как работает область действия или стек вызовов.Если я прав, блок цикла while удерживает значение длины как 2 независимо от того, что происходит за пределами этого блока?