黑马程序员技术交流社区
标题:
递归的问题
[打印本页]
作者:
章闽
时间:
2012-10-21 19:01
标题:
递归的问题
public class Test {
public static void main(String arg[]){
System.out.println(Method(5));
}
public static int Method(int n){
if(n==1)
return 1;
else
return n*Method(n-1);
}
}
这个是算5的阶乘的 不明白是怎么循环的
作者:
古银平
时间:
2012-10-21 19:25
希望你能看得懂,递归就是自身调用自身的方法
无标题.jpg
(106.91 KB, 下载次数: 35)
下载附件
2012-10-21 19:25 上传
作者:
陆建平
时间:
2012-10-21 19:37
是递归方法,过程是:5*4*3*2*1=120
作者:
杨雪松
时间:
2012-10-21 19:57
这还是得看你对递归理解了没有.
其实递归递归,从字面上解释就是在方法本身调用自己的方法,或者间接调用;
看你上面的程序,拿Method(5)来说:
n=5;
执行 5*Method(4);
--------------------
这时候看Method(4)
n=4 执行 4*Method(3);
.-------------------
看Method(3)
n=3,执行 3*Method(2);
---------------
Method(2);
n=2 执行 2*Method(1);
这时候,return 1;往上返回
2*1向上返回
3*(2*1)向上返回
4*(3*(2*1)) 向上返回
5*(4*(3*(2*1)) ) = 120
所以程序输出120;
这事简单的递归的例子;
所以可以看出来递归的关键得有递归出口(本体的If语句),还有递归方法;
作者:
占琳
时间:
2012-10-21 20:04
首先主函数调用Method的方法,然后把值5传给N
如果N等于1的时候返回1 其他时候执行 2*2-1
以此类推 3*2*1最后变成 5×4×3×2×1=120.
作者:
黑马李勇
时间:
2012-10-21 21:11
我觉得把你倒过来想的话 应该就很好理解了,
先是N==1 返回1
Method(n-1)的值应该是2才可以在调用的时候N的值等于1
那么N==2 返回2*1
Method(n-1)的值应该是3才可以在调用的时候N的值等于2
然后N==3 返回3*2*1
Method(n-1)的值应该是4才可以在调用的时候N的值等于3
然后N==4 返回4*3*2*1
Method(n-1)的值应该是5才可以在调用的时候N的值等于4
因为5是我们给Method调用的值,最后返回5*4*3*2*1=120即输出结果
作者:
陈琦
时间:
2012-10-21 22:38
2楼图画的好,还是图片一目了然
作者:
任雷彬
时间:
2012-10-22 12:53
递归:其实是在不断直接调用本身或间接调用本身。
5的阶乘相当于 5!=5*4!=5*4*3!=5*4*3*2!=5*4*3*2*1---->
1*2*3*4*5=2!*3*4*5=3!*4*5=4!*5=5!
对应程序代码就是
if(n==1) return 1;
else return n*Method(n-1) Method(n-1)调用本身。以此类推如下:
Method(5) -->5*Method(5-1) Method(5-1) --> 4*Mehod(4-1) Method(4-1) --> 3*Method(3-1)
Method(2) --> 2*Method(2-1) 逆向后推
判断条件中当 n==1时,return 1;所以
Method(1) -->1
Method(2)-->2*Method(1)-->2*1
Method(3)-->3*Method(2)-->3*2*Methode(1)-->3*2*1
Method(4)-->4*Method(3)-->4*3*Methode(2)-->4*3*2*Methode(1)-->4*3*2*1
Method(5)-->5*Method(4)-->5*4*Method(3)-->5*4*3*Method(2)-->5*4*3*2*Method(1)-->5*4*3*2*1 再往前推
所以先往后推再往前推,所以递推,需要限定条件。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2