一段递归代码public static void f(int n){
if(n > 1)
f(n-1);
System.out.println(n);
}
运行f(3)
结果为:1 2 3 ;
我本来以为结果是 1 。是否在栈空间中存储了n的信息?
能否帮助分析一下细节。
 

解决方案 »

  1.   

    你不管递归几次,最后还是会调用下面的system.out的,肯定会打印出来的
      

  2.   


    跟这个毫无关系!!!这是一个递归循环,最里面的循环是f(1),因此最先打印的是“1”,然后逐步向上推
    当if条件执行完,最后才执行“System.out.println(3);”
      

  3.   

    方法的生命周期图很丑 QQn=3↓
        | n=2↓
        |     |  n=1,打印1 ↓
        |     |           ↓
        |     |←—————-
        |     打印2 ↓
         ↓←——————
        打印3,结束   
      

  4.   

    栈空间中存储了n的信息? 告诉你,没有!
    可能你会问为什么是 1 2 3 ,不是 3  2 1 ,你看下你的,当 n>1 时,是不是又调用了你的那个方法,那么有没有走下去??直到最后 n=1时,方法调用结束,结束,结束...我楼上的解释很清楚
      

  5.   

    当f的参数等于3和2时,都会先执行f(2)和f(1)
    f(1)不符合条件直接输出1,之后返回,所以在f(2)中继续执行下一行输出2,然后返回,所以在f(3)中继续执行下一行输出3,退出
    n是完全的值传递,在每一次嵌套中的n都是独立的版本不会影响到其他嵌套中的n的判断或者输出