public class testing
{
public static void printnum(int a)
{
System.out.println( a);
if(a <= 3)
{
System.out.println("recursed");
printnum(a+1);
}
System.out.println( a);
}
public static void main(String...s)
{
printnum(1);
}
}
输出:
1
2
3
3
2
1
我希望程序在最后3个结束,但是我不知道下一个“ 2”和“ 1”从何而来?它如何以及为什么递减?
最佳答案
您有两个呼叫System.out.println(a)
。如果您区分它们,将会发现更容易理解:
public static void printNum(int a)
{
System.out.println("Before recursion: " + a);
if(a <= 3)
{
System.out.println("Recursing");
printNum(a + 1);
}
System.out.println("After recursion: " + a);
}
基本上,您的电话会嵌套-您嵌套最深的电话会显示:
Before recursion: 4
After recursion: 4
...,然后它将返回到
printNum(3)
的调用,它将显示:After recursion: 3
并返回到
printNum(2)
的呼叫,该呼叫将打印After recursion: 2
等等
现在也将是学习如何使用调试器单步执行代码,在每个点查看堆栈等的好时机。