void myMethod( int counter) {
if(counter == 0)
return;
else {
System.out.println("hello" + counter);
myMethod(--counter);
System.out.println("" + counter);
//return;
}
}
当我将3传递给函数时,此输出将是
hello3
hello2
hello1
0
1
2
我理解为什么输出有hello3 hello2 hello1,但为什么0 1 2?当计数器从3减少到0时,它应该进入if并返回,对吗?该程序如何进入System.out.println("" + counter)
行?
答案 0 :(得分:2)
由于它是递归的并且递归调用在打印行之前,它将递归地自我调用,直到它到达基本情况。只有在递归调用结束后才允许执行打印。
像这样的东西
ionic v1
首先这里将整个方法停止,但是你可以看到,基本类/递归调用的结束实际上将在其他递归方法中执行,所以你在012中的表单中看到的是在递归已经结束。
答案 1 :(得分:0)
这种情况发生的原因是代码执行后
myMethod(--counter);
它在它之后执行打印输出,因此每次计数器值不为0时,一旦其他递归函数完成,将始终调用此代码。每当你点击else {
块时,其中的所有代码都将被执行,System.out.println("" + counter)
最后打印,因为你之前有递归调用,并且首先执行该代码。
如果在IDE中设置断点并运行调试器,您将更清楚地了解正在发生的事情。