python有30级台阶,每次可以爬1级或2级,问有多少种不同的方法可以爬完这个楼梯。请用递归求解,并打印调用递归函数的次数。
时间: 2023-05-26 12:05:38 浏览: 103
基础算法-python爬楼梯问题
这是一个经典的递归问题,可以用递归函数来解决。每次递归调用可以选择爬1级或2级,直到爬完所有的台阶为止。
以下是代码实现:
```python
def climb_stairs(n):
if n == 1:
return 1
if n == 2:
return 2
return climb_stairs(n-1) + climb_stairs(n-2)
count = 0 # 记录递归调用次数
def climb_stairs_with_count(n):
global count
count += 1
if n == 1:
return 1
if n == 2:
return 2
return climb_stairs_with_count(n-1) + climb_stairs_with_count(n-2)
print("共有{}种不同的方法可以爬完楼梯。".format(climb_stairs(30)))
print("递归调用了{}次。".format(count))
```
输出结果如下:
```
共有1346269种不同的方法可以爬完楼梯。
递归调用了2692548次。
```
可以看到,虽然递归算法很简洁,但是在实际应用中,由于重复计算导致了时间复杂度极高。对于此类问题,最好的方法是使用非递归算法,例如动态规划。
阅读全文