If-Else阻塞递归函数

时间:2016-02-05 04:09:52

标签: java

我试图了解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次的原因。

2 个答案:

答案 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)