递归说白了自己调用自己。举个例子你求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就是一个出口,要不然会是死递归 |