【发布时间】:2023-03-10 00:55:01
【问题描述】:
有人可以帮我解释一下为什么这会导致无限递归循环吗?
可变长度达到值 1,但由于某种原因,即使循环条件为 while (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);
}
}
其他信息。
当我调试这段代码时:
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 循环出来后,为什么它会回到与length 相同的while 循环中作为2?
编辑:我感谢您的所有回复并理解,如果我想编写这样的代码,我可能会像大多数递归方法一样使用 if 语句,但这只是我可能不了解范围或调用方式的问题堆栈工作。如果我是正确的,那么无论在该块之外发生什么,while 循环块都会将长度值保持为 2?
【问题讨论】:
-
你的预期输出是什么?
-
@TimBiegeleisen 当我调试有问题的代码时,我发现在 while(1>1) 条件之后它退出循环,然后再次返回到 while 循环 with while (2>1)这是怎么发生的?
-
能否请您添加一段代码应该做什么的描述?
-
循环是无限的,因为长度在循环内不会改变。如果您使用 if 语句而不是 while 语句,则可能不需要循环。递归是循环的替代品。
-
@bert 这似乎是最明智的答案。那里甚至不应该有一个循环,因为递归会隐式递减计数器。
标签: java recursion while-loop