黑马程序员技术交流社区

标题: 关于递归,如何理解 [打印本页]

作者: A昌_e244R    时间: 2016-5-31 01:05
标题: 关于递归,如何理解
最近学到了递归,看起来简单,自己做起来又不知道如何下手,越想越乱!
如何去理解递归,如何去使用递归呢,谢谢!!

作者: 爱生活爱Java    时间: 2016-5-31 12:46
递归说白了自己调用自己。举个例子你求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就是一个出口,要不然会是死递归




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2