什么是方法递归?
*递归是一种算法,在程序设计语言中广泛应用。
从形式上说:方法调用自身的形式称为方法递归(recursion)。
递归的形式
*直接递归:方法自己调用自己。
*间接递归:方法调用其他方法,其他方法又回调方法自己。
使用方法递归时需要注意的问题:
递归如果没有控制好终止,会出现递归死循环,导致栈内存溢出错误。
递归算法三要素:
递归的公式:f(n)=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;
}
}
}