关于递归的一个代码执行顺序,请大家讲解一下
public class Digui02 {
public static void main(String[] args) {
digui(5);
}
private static void digui(int i) {
if (i >= 2){
digui(i-1);
}
System.out.println(i);
}
}
1
2
3
4
5
请问一下大家,为什么最后会打印 2 3 4 5 以及执行流程,请大家赐教 谢谢了
输入i = 5;即调用digui(5);
调用顺序为:先调用digui(4),再打印5
而,digui(4),先调用digui(3),再打印4
而,digui(3),先调用digui(2),再打印3
而,digui(2),先调用digui(1),再打印2
而,digui(1),打印1
因此展开后如下图:
digui(5){
digui(4){
digui(3){
digui(2){
digui(1){
System.out.println(1);
}
System.out.println(2);
}
System.out.println(3);
}
System.out.println(4);
}
System.out.println(5);
}
程序就是循环调用digui这个函数,digui(5) -- digui(4) -- digui(3) -- digui(2) -- digui(1);但是因为每次递归调用后还有System.out.println(i)这一句,所以这一句调用时的顺序是 System.out.println(1); System.out.println(2); System.out.println(3); System.out.println(4); System.out.println(5); 打印出来的结果就是
1
2
3
4
5
可以debug 运行打上断点你就更清楚了
private static void digui(int i) {
if (i >= 2){
//把他放到这里点出来的就是 5 4 3 2 1
System.out.println(i);
digui(i-1);
}
}