递推
概念讲解
什么是递推?
递推是通过已知条件,逐步推导出未知结果的算法思想。
递推 vs 递归
| 特性 | 递推 | 递归 |
|---|---|---|
| 方向 | 从前往后 | 从后往前 |
| 实现 | 循环 | 函数调用 |
| 效率 | 高 | 低(可能重复计算) |
经典递推模型
1. 斐波那契数列
12345678910int fib(int n) {
if (n <= 1) return n;
int a = 0, b = 1;
for (int i = 2; i <= n; i++) {
int c = a + b;
a = b;
b = c;
}
return b;
}2. 台阶问题
问题: 一次可以走 1 级或 2 级台阶,上 n 级台阶有多少种走法?
3. 过河卒
问题: 棋盘上从左上角到右下角,只能向右或向下走,有多少条路径?
123456789int paths(int m, int n) {
vector<vector<int>> dp(m, vector<int>(n, 1));
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
return dp[m-1][n-1];
}考点分析
初赛考查方式
- 选择题: 递推关系
- 程序阅读: 递推程序
- 编程题: 递推应用
常见考点
- 斐波那契数列
- 台阶问题
- 路径计数
例题精讲
例题 1:斐波那契
题目: 求第 5 个斐波那契数。
解答:
答案是 5。
例题 2:台阶问题
题目: 上 4 级台阶有多少种走法?
解答:
答案是 5 种。
练习题
- 斐波那契数列的前 10 项是什么?
查看答案
前 10 项(从第 0 项开始):
| n | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| F(n) | 0 | 1 | 1 | 2 | 3 | 5 | 8 | 13 | 21 | 34 |
递推公式:
- 上 5 级台阶有多少种走法?
查看答案
8 种
| 台阶数 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 走法数 | 1 | 2 | 3 | 5 | 8 |
递推公式:
(最后一步走 1 级或 2 级)
- 3×3 的棋盘从左上角到右下角有多少条路径?
查看答案
6 条
使用递推:
| 0 | 1 | 2 | |
|---|---|---|---|
| 0 | 1 | 1 | 1 |
| 1 | 1 | 2 | 3 |
| 2 | 1 | 3 | 6 |
易错点
⚠️ 注意:
- 递推是从前往后计算
- 注意初始值的设定
- 递推通常比递归效率高
- 注意整数溢出问题