学习目标与重点
掌握递归函数的定义、核心原理及适用场景,理解'递推 - 回归'过程。能够识别栈溢出、重复计算等常见问题并给出解决方案。同时了解尾递归的优化原理,学会根据实际场景在递归与迭代间做出选择。
核心重点:终止条件设计、尾递归与普通递归的区别、栈溢出规避。
递归函数基础认知
什么是递归函数
递归函数是指在函数体内部直接或间接调用自身的函数。其核心思想是'分而治之'——将大问题拆解为结构相同的小问题,直到小问题可直接求解(终止条件),再逐步回归得到原问题的答案。
生活中常见的递归案例包括俄罗斯套娃(层层嵌套直至最小)、阶乘计算(n! = n × (n-1)!)以及斐波那契数列。编写递归函数必须满足三个条件,否则会导致无限递归最终引发栈溢出:
- 终止条件:明确何时停止,返回确定值。
- 递归表达式:将原问题拆解为更小的子问题,结构需一致。
- 收敛性:每次调用都使问题规模缩小,趋近于终止条件。
执行过程解析
递归执行分为两个阶段:递推阶段和回归阶段。递推时函数不断调用自身拆解问题,触发终止条件后进入回归阶段,逐步返回结果。
以计算 n 的阶乘为例:
#include <iostream>
using namespace std;
// 递归计算 n 的阶乘
int factorial(int n) {
// 终止条件:0! = 1,1! = 1
if (n <= 1) {
return 1;
}
// 递归表达式:n! = n × (n-1)!
return n * factorial(n - 1);
}
int main() {
int n = 5;
cout << n << "! = " << factorial(n) << endl;
// 输出:5! = 120
return 0;
}
当 n=5 时,递推过程为 factorial(5) → 5 × factorial(4) → ... → 5×4×3×2×factorial(1)。回归时从 factorial(1) 返回 1,依次相乘得到 120。


