Java 为什么print方法在递归结束后运行?
为什么下面表达式的输出是打印-1到10Java 为什么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)
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时开始。