一段递归代码public static void f(int n){
if(n > 1)
f(n-1);
System.out.println(n);
}
运行f(3)
结果为:1 2 3 ;
我本来以为结果是 1 。是否在栈空间中存储了n的信息?
能否帮助分析一下细节。
if(n > 1)
f(n-1);
System.out.println(n);
}
运行f(3)
结果为:1 2 3 ;
我本来以为结果是 1 。是否在栈空间中存储了n的信息?
能否帮助分析一下细节。
跟这个毫无关系!!!这是一个递归循环,最里面的循环是f(1),因此最先打印的是“1”,然后逐步向上推
当if条件执行完,最后才执行“System.out.println(3);”
| n=2↓
| | n=1,打印1 ↓
| | ↓
| |←—————-
| 打印2 ↓
↓←——————
打印3,结束
可能你会问为什么是 1 2 3 ,不是 3 2 1 ,你看下你的,当 n>1 时,是不是又调用了你的那个方法,那么有没有走下去??直到最后 n=1时,方法调用结束,结束,结束...我楼上的解释很清楚
f(1)不符合条件直接输出1,之后返回,所以在f(2)中继续执行下一行输出2,然后返回,所以在f(3)中继续执行下一行输出3,退出
n是完全的值传递,在每一次嵌套中的n都是独立的版本不会影响到其他嵌套中的n的判断或者输出