6岁的小明上楼梯,一步只能迈1个或3个台阶,现在有段15个台阶的楼梯,要想上到第 15 个台阶,编写程序计算小明有多少种上法。
时间: 2024-10-17 20:08:16 浏览: 44
这是一个经典的动态规划问题,可以用递推的方式来解决。我们可以定义一个数组 `dp`,其中 `dp[i]` 表示到达第 `i` 个台阶时,小明可以通过多少种不同的方式达到。对于每个台阶,小明要么走一步,要么走三步,所以从上一个台阶(`dp[i - 1]`)开始,有两种可能的方式:
- 如果他走了1步,那么他可以从第 `i - 1` 步直接走到第 `i` 步,这时 `dp[i] = dp[i - 1]`;
- 如果他走了3步,那么他可以从第 `i - 3` 步(如果存在的话,即 `i >= 3`)走到第 `i` 步,这时 `dp[i] = dp[i - 3]`。
边界条件是 `dp[0] = 1`(只有一个方式到达第一个台阶,就是直接上去),`dp[1] = 1` 和 `dp[2] = 2`(可以一步一步地走,也可以三步一跨)。
下面是相应的 Python 代码实现:
```python
def num_ways(steps):
if steps == 0 or steps == 1:
return 1
elif steps < 3:
return 2
dp = [0] * (steps + 1)
dp[0], dp[1], dp[2] = 1, 1, 2
for i in range(3, steps + 1):
dp[i] = dp[i - 1] + dp[i - 3]
return dp[steps]
# 测试
num_ways(15)
```
运行这段代码后,将会得到结果,表示小明上楼梯的不同方式数量。
阅读全文