6岁的小明上楼梯,一步最多能迈3个台阶,现在有15个台阶的楼梯,要想上到第15个台阶,编程计算小明有多少种走法。
时间: 2024-10-10 09:15:33 浏览: 52
这是一个经典的动态规划问题,可以用递推的方法来解决。我们可以定义一个变量`ways[i]`表示走到第`i`个台阶时的不同走法数。对于每个台阶,小明可以从前一个台阶直接跳过去(即不迈空),也可以跨过两个或三个台阶。
初始条件是:`ways[0] = 1`(只有一种方式到达第一个台阶,就是直接上去),`ways[1] = 1`,`ways[2] = 2`(从第一个台阶上来有两种方式:一步或者两步)。
然后我们根据递归公式进行计算:
- 如果`i`是3的倍数,那么`ways[i] = ways[i - 3] + ways[i - 2] + ways[i - 1]`,因为小明可以一步、两步或三步迈到这个台阶。
- 如果`i`不是3的倍数,但小于15,那么`ways[i] = ways[i - 1]`,因为小明只能一步迈到这个台阶。
下面是对应的Python代码:
```python
def stair_ways(steps):
if steps <= 0:
return 0
if steps == 1 or steps == 2:
return 1
elif steps % 3 == 0:
return stair_ways(steps - 3) + stair_ways(steps - 2) + stair_ways(steps - 1)
else:
return stair_ways(steps - 1)
steps = 15
ways = stair_ways(steps)
print("小明有", ways, "种走法上到第", steps, "个台阶。")
```
阅读全文