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的详细赋值过程,求解啊...
------解决方案--------------------这不是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;以此类推