代码之家  ›  专栏  ›  技术社区  ›  ProgrammingNoob321312

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

  •  -2
  • ProgrammingNoob321312  · 技术社区  · 3 年前
    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”)呢?

    1 回复  |  直到 3 年前
        1
  •  0
  •   Michel K    3 年前

    解释可以这样可视化:

    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() 被称为(递归),缩进增加。当执行从 dowup() ,压痕减小。