定义
在数学与计算机科学中,递归(Recursion)是指在函数的定义中使用函数自身的方法。实际上,递归,顾名思义,其包含了两个意思:递 和 归,这正是递归思想的精华所在。
将原问题转化成一个更小的同一问题
调用自己,将问题从上到下逐一探究自身所需的条件(下层问题的解为上层条件)
从上往下递归的,直到递归到最底,再一层一层着把值返回
示例
求 a 的阶乘
public class Recursion {
//求a!
public static int factorial(int a) {
int res = 1;
for (int i = 1; i <= a; i++) {
res *= i;
}
return res;
}
/*
使用递归算法
例:5! = 5 * 4!
5! = 5 * 4 * 3! ...
实现一个求阶乘的方法m()
*/
public static int factorial1(int a) {
//递归到底的情况
if (a == 1) {
return 1;
}
return a * factorial1(a - 1);
}
}
斐波那契数列
// 1 2 3 4 5 6 7 ..... n
// 1 1 2 3 5 8 13......res
public static int fbnq(int n) {
if (n == 2 || n == 1) {
return 1;
}
return fbnq(n - 1) + fbnq(n - 2);
}
杨辉三角
//杨辉三角
public static int yhTriangle(int row, int a) {
//存在条件
if (a >= 0 && a <= row) {
if (a == 0 || row == a) {
return 1;
}
return yhTriangle(row - 1, a - 1) + yhTriangle(row - 1, a);
} else {
return -1;
}
}
递归三要素
- 明确递归终止条件;防止无限递归
- 给出递归终止时的处理办法;
- 提取重复的逻辑,缩小问题规模。