题目描述
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
题目解析
非常经典的递归算法,也即斐波那契额数列。最开始就想用递归来做:F(n) = F(n -1)+F(n-2),但是超时了。
if n == 0:
return 1
if n == 1:
return 1
else:
return self.climbStairs(n-1)+self.climbStairs(n-2)
然后采用迭代的方式,所有的递归算法都可以变成迭代算法
class Solution:
def climbStairs(self, n):
p = 0
q = 0
r = 1
for i in range(1,n+1):
p = q
q = r
r = p + q
return r
Tips
- 经典的递归算法在有时间限制的情况下,并不一定能适合。可以考虑改为迭代。
- 在写递归程序的时候,不用执着于想清楚调用逻辑,写出递归表达式即可。