什么是方法递归?
*递归是一种算法,在程序设计语言中广泛应用。
从形式上说:方法调用自身的形式称为方法递归(recursion)。
递归的形式
*直接递归:方法自己调用自己。
*间接递归:方法调用其他方法,其他方法又回调方法自己。
使用方法递归时需要注意的问题:
递归如果没有控制好终止,会出现递归死循环,导致栈内存溢出错误。
递归算法三要素:
递归的公式:f(1)=f(n-1)*n;
递归的终结点:f(1)
递归的方向必须走向终结点:
f(5)=f(4)*5
f(4)=f(3)*4
f(3)=f(2)*3
f(2)=f(1)*2
f(1)=1
public class DiGuiAnLi {public static void main(String[] args) {//计算n的阶乘System.out.println(jiecheng(4));}public static int jiecheng(int n){if (n == 1) {return 1;}else{return jiecheng(n-1)*n;}}
}
public class DiGuiQIUHE {//求1-n的和public static void main(String[] args) {System.out.println(sum(3));}public static int sum(int n){if (n==1){return 1;}else{return n+sum(n-1);}}
}
案例猴子吃桃问题
·猴子第一天摘下若干桃子,当即吃了一半,觉得好不过瘾,于是又多吃了一个第二天又吃了前天剩余桃子数量的半,觉得好不过瘾,于是又多吃了一个,以后每天都是吃前天剩余桃子数量的一半,觉得好不过瘾,又多吃了一个等到第10天的时候发现桃子只有1个了。需求:请问猴子第-天摘了多少个桃子?
public class DiGuiTaoZi {public static void main(String[] args) {/*** 案例猴子吃桃问题* ·猴子第一天摘下若干桃子,当即吃了一半,觉得好不过瘾,于是又多吃了一个第二天又吃了前天剩余桃子数量的半,觉得好不过瘾,* 于是又多吃了一个,以后每天都是吃前天剩余桃子数量的一半,觉得好不过瘾,又多吃了一个等到第10天的时候发现桃子只有1个了。* 需求:请问猴子第-天摘了多少个桃子?* f(10)=1* f(9)=(f(10)+1)*2*f(n-1)=(f(n)+1)*2* f(1)=(f(2)+1)*2* ...* f(8)=(f(9)+1)*2* f(9)=(f(10)+1)*2* f(10)=1*/System.out.println(tiaozi(1));}public static int tiaozi(int n) {if (n==10){return 1;}else{return (tiaozi(n+1)+1)*2;}}
}