连续两次递归调用的每一步的调用情况

时间:2025-02-06 12:43:11

package ;

public class Digui {

public static void main(String[] args) {

Digui.sysOut1(4);

/*  对于递归,先正向到达深度的最深4-3-2-1,然后按照深入的逆序1-2-3-4回头执行正向深入时尚未执行的部分.正着走一遍,必须反着走一遍,无论正着的一遍是怎样结束的.

 *    4

3

2

1【正向深入到最深处的位置】

0

最后一句

-99这里开始逆向回头N=1逆序回头到N1时未执行完的部分为第2句和第3句,执行第2句时,先执行4《结果就是上面的-99》,再执行3《结果就是这里的“最后一句”》这里是第2句执行的编号为4 的结果】

最后一句【这里是第2句执行的编号为3的结果】

最后一句【这里是第3句的结果,是逆序回头到N1时执行完第2句之后再执行的这个第3,,这样就解释了为什么连续两次递归最后一句要执行两次

-98【逆序回头到N2时未执行完的部分sysOut1(N-100);

最后一句【逆序回头到N2时未执行的打印("最后一句");

最后一句【逆序回头到N2时未执行的打印("最后一句");

-97

最后一句

最后一句

-96

最后一句

最后一句         */

}

public static void sysOut1(int N){

System.out.println(N);//4

if(N>0){

sysOut1(N-1);//1

sysOut1(N-100);//2

}

System.out.println("最后一句");//3

}

}