Java 关于递归if-else块

Java 关于递归if-else块,java,Java,我试图理解递归是如何工作的。下面是If-else块的代码 public class Test { public void test(int count){ if(count ==1){ System.out.println("Inside IF"); } else{ System.out.println("Inside 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);
       }


         }
上述代码的输出为

其他内部 其他内部 其他内部 其他内部 内部IF 试验 试验 试验 试验

有人能帮我理解为什么考试被打印了4次吗

谢谢

测试(5)->“其他内部”->测试(4)->“其他内部”->测试(3)->“其他内部”->测试(2)->“其他内部”->测试(1)->内部If

在这一点上,您已经“进入其他”了4次。有4个待处理的PrintLn(“测试”)需要处理

“测试” “测试” “测试”
“Test”

当你从方法a调用方法b时,方法a(调用方法)不仅仅是结束,它会一直等到b完成,然后继续它的快乐之路。在你的例子中,你每次都调用同一个方法-每个方法都会等待它调用的方法完成。因此,当你调用
t.Test(5)
,它落在else块中,在那里调用
test(4)
,因此您对
t.test(5)
的原始调用正在等待
test(4)
完成。但是
test(4)
将调用
test(3)
调用
test(2)
,然后等待
test(2)
调用
测试(1)
神奇的事情发生了


test(1)
将落入if块并执行
System.out.println(“Inside if”);
,但没有其他执行方法,因此它将返回。
test(2)
一直在等待
test(1)
返回,它现在已经返回了,所以它将继续执行下一行代码,从它所在的位置开始执行,这是
System.out.println(“TEST”);
。它没有其他要执行的内容,所以它返回到
TEST(3)
,它正在等待
TEST(2)
返回,所以另一行
System.out.println(“TEST”)它返回到
测试(4)
:另一个
系统.out.println(“测试”);
,最后返回到原始
t.test(5)

我认为某人应该是一本“书”" . 要理解的一个快速帮助是,所有的方法调用都被保存在堆栈中,直到达到终止条件,当pop发生时。这将对你有所帮助。从5减到1需要4次减量。看看它是否有助于解释事情。