假设有一段很长的楼梯,小明一步最多能上3个台阶,编写程序使用递推法小明到达第n个台阶有多少种上楼梯的方法
时间: 2023-07-15 14:10:38 浏览: 76
问题描述:有n级台阶,一个人每次上一级或者两级,问有多少种走完n级台阶的方法。
5星 · 资源好评率100%
可以使用动态规划来解决这个问题,具体步骤如下:
1. 定义状态:设 $dp[i]$ 表示到达第 $i$ 个台阶的方法数。
2. 初始化状态:$dp[0]=1$,$dp[1]=1$,$dp[2]=2$,因为到达第 $0$ 个台阶只有一种方法,而到达第 $1$ 和第 $2$ 个台阶有分别一种和两种方法。
3. 状态转移:对于第 $i$ 个台阶,可以从第 $i-1$、$i-2$ 或 $i-3$ 个台阶到达,因此有:
$$dp[i]=dp[i-1]+dp[i-2]+dp[i-3]$$
4. 最终结果:返回 $dp[n]$,表示到达第 $n$ 个台阶的方法数。
下面是 Python 代码实现:
```python
def climb_stairs(n: int) -> int:
if n <= 2:
return n
dp = [0] * (n + 1)
dp[0], dp[1], dp[2] = 1, 1, 2
for i in range(3, n + 1):
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]
return dp[n]
```
这个算法的时间复杂度为 $O(n)$,空间复杂度为 $O(n)$。
阅读全文