Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么print方法在递归结束后运行?_Java - Fatal编程技术网

Java 为什么print方法在递归结束后运行?

Java 为什么print方法在递归结束后运行?,java,Java,为什么下面表达式的输出是打印-1到10 public class Main { public static void main(String[] args) { subtractOne(10); } public static void subtractOne(int i){ if(i>=0){ subtractOne(i-1); } System.out.println(i)

为什么下面表达式的输出是打印-1到10

public class Main
{
    public static void main(String[] args) {
        subtractOne(10);
    }

    public static void subtractOne(int i){
        if(i>=0){
            subtractOne(i-1);
        }
        System.out.println(i);
    }
}

当您调用方法
subtractOne(10)
时,它调用
subtractOne(9)
,依此类推,直到
subtractOne(-1)
,因为前面的i(0)是>=0,然后在
subtractOne(-1)
块中,“if”块失败,它只打印i,即-1。然后这个函数返回到调用最后一个函数的函数,即
subtractOne(0)
,它在“if”块之后继续工作并打印(0),依此类推,直到最后一个方法打印10。

只要
i
转到<0,递归将达到其全部深度,递归调用将全部“unwind”(返回),每个函数最终调用其
println
i
,该值在
i
为-1时开始。