为什么这个 Java 代码输出“3210123”?

Why does this Java code output "3210123"?

public static void downup(int n) {
    System.out.println(n);
    if(n>0) {
        downup(n-1);
        System.out.println(n);
    }   
}

看到这段代码,不明白为什么n为3时输出的是3210123,只能理解为“3210”。其余的输出(“123”)呢?

执行可以这样形象化:

downup(3)
    println(3)
    downup(3-1)
        println(2)
        downup(2-1)
            println(1)
            downup(1-1)
                println(0)
                condition false, recursion stopped
                return
            println(1)
            return
        println(2)
        return
    println(3)
    return

每次 downup() 被调用(递归),缩进增加。当从 downup() 执行 returns 时,缩进减少。