我试图了解If-Else在使用递归函数时的工作原理。下面是我的If-Else块的代码:
public class Test {
public void test(int count) {
if (count == 1) {
System.out.println("Inside IF");
} else {
System.out.println("Inside Else");
test(--count);
System.out.println("TEST");
}
}
public static void main(String[] args) {
Test t = new Test();
t.test(5);
}
}
代码的输出是:
Inside Else
Inside Else
Inside Else
Inside Else
Inside IF
TEST
TEST
TEST
TEST
有人可以帮我理解TEST打印4次的原因。
答案 0 :(得分:1)
test(5) - > "内部其他" - > test(4) - > "内部其他" - > test(3) - > "内部其他" - > test(2) - > "内部其他" - > test(1) - >内部如果"
在这一点上,你是" Inside Else" 4次。有4个待处理的PrintLn(" Tests")需要处理。
"试验" "试验" "试验" "试验"
答案 1 :(得分:0)
当你用方法a调用方法b时,方法a(调用方法)不仅仅结束,它等待直到b完成然后继续它的快乐方式。在您的情况下,您每次都调用相同的方法 - 每个方法都等待它调用的方法完成。因此,当您拨打t.test(5)
时,它会进入其调用test(4)
的其他区域,因此您t.test(5)
的原始呼叫正在等待test(4)
完成。但是test(4)
会调用test(3)
并等待它完成。 test(3)
调用test(2)
,等待。然后test(2)
调用test(1)
并发生魔法。
test(1)
将落入if-block并执行System.out.println("Inside IF");
,但没有其他任何内容可以执行,因此它将返回。 test(2)
一直在等待test(1)
返回,它现在已经返回,因此它将继续执行下一行代码,它来自System.out.println("TEST");
。没有其他任何内容可以执行,因此返回到test(3)
,等待test(2)
返回,所以另一个System.out.println("TEST");
。它返回test(4)
:另一个System.out.println("TEST");
,最后返回到main中的原始t.test(5)
。