需要爬一个n阶楼梯来到达楼梯顶部,每次可以爬1阶也可以爬2阶。求共有多少种爬法?
递归:到达n的“前一步”走法可以是:从n-1处爬1阶楼梯,或者从n-2处爬2阶楼梯。
那么递归表达式即写成
return climbStairs(n - 1) + climbStairs(n - 2)
,递归结束条件为n=1或n=2。- 递归方法会导致超时,爬楼梯的爬法数目符合斐波那契数列。(为什么?可参考:爬楼梯与斐波那契数列)
def climbStairs(self, n):
"""
:type n: int
:rtype: int
"""
a = 1
b = 1
for i in range(n):
a, b = b, a + b