递归是什么
递归本质上也是一种循环,只不过通过循环体调用自己来进行所谓的循环。
一个简单的栗子
我们拿阶乘举例
function Factorial(n) {
if (n <= 1) return 1;
return n * Factorial(n -1);
}
// 这里拓展下 我们可以开启尾递归优化
function Factorial(n, total = 1) {
if (n <= 1) return total;
total *= n;
return Factorial(n -1, total);
}
递归实际执行过程如下

递归的代码模板
记住递归的结构能让我们在遇到这类问题的时候,更快、更完整的找到问题的方法。
function recursion(level, parma1, parma1, ...) {
// 递归终止条件 返回结果
if (level > Max_level) return process_result;
// 处理当前层逻辑
process(level, data...);
// 下探到下一层
self.recursion(level + 1, p1, ...);
// 清理当前层(当需要时)
clear something..
}
递归的思维要点
- 不要人肉进行递归(最大误区)
- 找到最近最简的办法,将其拆解成可重复解决的问题(重复子问题),比如计算n的阶乘,我们可以把这个问题拆解成找 n 和 Factorial(n - 1)相乘的结果
- 数学归纳法,寻找n = 1,n = 2成立,且直到 n 都成立的方法。