Java 关于递归if-else块
我试图理解递归是如何工作的。下面是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");
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次减量。看看它是否有助于解释事情。