A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© A昌_e244R 中级黑马   /  2016-5-31 01:05  /  876 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

最近学到了递归,看起来简单,自己做起来又不知道如何下手,越想越乱!
如何去理解递归,如何去使用递归呢,谢谢!!

1 个回复

倒序浏览
递归说白了自己调用自己。举个例子你求5的阶乘。
递归思想:
           5!=5*4!
                   4!=4*3!
                           3!=3*2!
                                   2!=2*1!(1的阶乘自然就是1啦)

方法实现
public static int getJie(int  num){
     if(num==1){
       return 1;
     }else{
       return  num =num*getJie(num-1);
     }
}
具体实现
1.Jvm调用main方法  getJie(5)进栈   返回   5*getJie(4)
2. getJie(4)进栈      返回   4*getJie(3)
3. getJie(3)进栈      返回   3*getJie(2)
4. getJie(2)进栈      返回   2*getJie(1)
5. getJie(1)进栈      返回   1

完了从getJie(1) 开始依次弹栈   
1. getJie(1)  返回1  弹栈
2. getJie(2)  -->2*getJie(1)    -->2*1  =2  弹栈
3  getJie(3) -->3*getJie(2)   --->3*2 =6     弹栈
4. getJie(4)  --->4*getJie(3)  --->4*6  =24   弹栈
5. getJie(5) ---> 5*getJie(4)   -->5*24=120  弹栈

个人总结:   1.递归必须有一个出口,这里的return 1就是一个出口,要不然会是死递归
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马