日期:2014-05-20  浏览次数:20793 次

java递归原理求高人解惑
int i=1;
int Test(int n){
System.out.println("*****************"+(i++));
int result =0;
if(n==1)
return 1;
result = Test(n-1)*n;
System.out.println(result+"   "+n);
return result;
}
我进行调试,比如n=8,只打印第一条语句,打了八次,当n=1时返回结果1,跳出方法,然后继续执行,此时n变为2,为何?再然后只执行第二条打印语句的内容,并不执行前面内容,为何?直到n变为8,退出。还想了解result的详细赋值过程,求解啊...
java 递归原理

------解决方案--------------------
这不是n变8的时候退出,是n==2的时候退出。
------解决方案--------------------
当n=2的时候会执行result = Test(2-1)*n;此时等Test(1)执行完回来才能往下走,但是当n>3的时候,后面还是要递归,次数递减。
这种问题建议debug,看的会比较清楚
*********i********1
*********i********2
*********i********3
*********i********4
*********i********5
*********i********6
*********i********7
*********i********8
2   2
6   3
24   4
120   5
720   6
5040   7
40320   8

------解决方案--------------------
result = Test(n-1)*n; 你分开看

Test(n-1) 这个为一部分 。

加入n=5
2*1   
3*(2*1)    
4*(3*(2*1)) 
5*(4*(3*(2*1)) ) = 120    
------解决方案--------------------
1、其实不是n=1时打印第二条输出语句,而是n=2的时候,Test(2-1)递归终止并返回值1(原因:if(n==1) return 1),result=Test(2-1)*2后,程序继续往下走,执行第二个输出语句。
2、n=1,其实是2-1作为n传递给Test方法。if(n==1) return 1;这句终止递归,并返回值1。相当于递归到最深处后,退回到倒数第二个位置,也就是n=2那里。
3、递归终止后,逐级退回上次递归的地方result = Test(n-1)*n,n=2的时候,Test(2-1)返回值为1,所以result=1*2,由于return result,所以n=2的时候Test返回值为2;n=3,Test(3-1)返回2,result=2*3,Test返回值为6;以此类推