理解递归的麻烦

Exc*_*ion 3 java recursion

好的,所以我有一个程序:

public class Rec {
    public static void main(String[] args) {
        test(5);
    }
    static void test(int n) {
        if (n > 0) {
        System.out.println(n);
        test(n-1);
        System.out.println(n);
        }
    }
Run Code Online (Sandbox Code Playgroud)

它的输出是5,4,3,2,1,1,2,3,4,5.我的问题是,为什么/如何执行第二个println(n)语句?我认为函数调用会完全切断它,而是以令我困惑的方式行事.这不是家庭作业或任何事情,我真的很难理解递归是如何工作的.

Nie*_*sen 5

一旦完成,所有方法调用都会返回到同一个地方.

通过有效地链接他们,你得到

 System.out.println(5)
     System.out.println(4)
        System.out.println(3)
            System.out.println(2)
                system.out.println(1)
                   // If is not true now.
                System.out.println(1)
            System.out.println(2)
        System.out.println(3)
     System.out.println(4)
 System.out.println(5)
Run Code Online (Sandbox Code Playgroud)

那有意义吗?