假设一段楼梯共 15 个台阶,小明一步最多能上 3 个台阶。利用python编写程序计算小明上这段楼梯一共有多少种方法。要求给出递推法和递归法两种代码。
时间: 2024-02-20 10:56:19 浏览: 89
好的,我来分别给你展示递推法和递归法的代码。
递推法:
```python
def count_ways(n):
if n == 1:
return 1
if n == 2:
return 2
if n == 3:
return 4
dp = [0] * (n + 1)
dp[1] = 1
dp[2] = 2
dp[3] = 4
for i in range(4, n + 1):
dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
return dp[n]
n = 15
ways = count_ways(n)
print("小明上 %d 个台阶的方法数为:%d" % (n, ways))
```
递归法:
```python
def count_ways(n):
if n == 1:
return 1
if n == 2:
return 2
if n == 3:
return 4
return count_ways(n-1) + count_ways(n-2) + count_ways(n-3)
n = 15
ways = count_ways(n)
print("小明上 %d 个台阶的方法数为:%d" % (n, ways))
```
注意,这两种方法的时间复杂度都是 $O(n)$,但递归法的空间复杂度比较大,因为它需要递归调用函数,导致函数调用栈较深,建议使用递推法。
阅读全文