文章目录
前言
本文的目的是理解递归算法的原理,以及掌握简单的应用场景。
一、递归算法的原理
一个大问题可以分解成几个小问题,其中有的小问题可以直接实现,另一部分小问题与大问题的实现方式相同,从而进入循环,递归到最后会有一个直接实现方式,即递归出口。
二、递归算法的应用
1.利用递归求阶乘
- n的阶乘: n×(n-1)!
- n-1的阶乘:(n-1)×(n-2)!
- n-2的阶乘:(n-2)×(n-3)!
- ······
- 3的阶乘:3×2!
- 2的阶乘:2×1!
- 1的阶乘:1!
- 其中1!就是递归出口
代码如下:
public static void main(String[] args) {
int fac = getFac(5);
System.out.println(fac);
}
public static int getFac(int n) {
int fac = 1;
if (n > 0) {
if (n == 0 || n == 1) {
return 1;
} else {
for (int i = 2; i <= n; i++) {
fac = fac * i;
}
}
}
return fac;
}
2.利用递归求斐波那契数列的第N项的值
- 第n项的值:第n-1项的值+第n-2项的值
- 第n-1项的值:第n-2项的值+第n-3项的值
- 第n-2项的值:第n-3项的值+第n-4项的值
- ······
- 第4项的值:2+1=3
- 第3项的值:1+1=2
- 第2项的值:1
- 第1项的值:1
- 其中第1项的值和第2项的值就是递归出口
代码如下:
public static void main(String[] args) {
int sum = getSum(6);
System.out.println(sum);
}
public static int getSum(int n) {
if(n==1 || n==0) {
return 1;
}else {
int sum = getSum(n-1)+getSum(n-2);
return sum;
}
}