用Python实现假设一段楼梯共 15 个台阶,小明一步最多能上 3 个台阶。编写程序 计算小明上这段楼 梯一共有多少种方法。要求给出递推法和递归法两种 代码。
时间: 2024-10-20 16:14:23 浏览: 112
在Python中,我们可以使用动态规划(Dynamic Programming)的思想,结合递推法和递归法来解决这个问题。
**递推法(Bottom-Up Approach):**
递推法通常是从最简单的情况开始,逐步计算复杂情况。在这个问题中,我们可以从最小步数开始,一步步向上增加直到达到总步数。
```python
def climb_stairs_iterative(steps):
dp = [0] * (steps + 1)
dp[0], dp[1], dp[2] = 1, 1, 2 # 基本情况:0步、1步和2步各有1种方法
for i in range(3, steps + 1):
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3] # 当前步数等于前面几步之和
return dp[steps]
# 调用函数
climb_stairs_iterative(15)
```
**递归法(Top-Down Approach):**
递归法则会先定义基本情况,然后将问题分解为更小的子问题并求解,最后组合结果。
```python
def climb_stairs_recursive(steps):
if steps <= 2:
return steps
else:
return climb_stairs_recursive(steps - 1) + climb_stairs_recursive(steps - 2) + climb_stairs_recursive(steps - 3)
# 调用函数
climb_stairs_recursive(15)
```
**注意**: 递归法可能会有性能问题,因为它会重复计算很多相同的子问题。当步骤很大时,建议使用迭代法。
阅读全文