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


等等

现在也将是学习如何使用调试器单步执行代码,在每个点查看堆栈等的好时机。

10-08 19:41