问题:
有10
阶楼梯,每次只能走1-2
步,不能后退,问有几种走法?
设F(n)表示n阶一共有多少走法,从简单的一步步看:1
2
3
4
5F(1) = 1
F(2) = 2
F(3) = 3
F(4) = 5
...
可以看到F(n) = F(n-2) + F(n-1)
推想到更一般化的问题:
有n
阶楼梯,每次只能走1-m
步,不能后退,问有几种走法?
可以推测:F(n) = F(n-1) + F(n-2) + ... + F(n-m)
代码实现:1
2
3
4
5
6
7
8
9def climb(m,n):
dp = [0]*(n+1)
dp[0] = 1
for i in range(1,n+1):
for j in range(1,m+1):
if i < j:break
else:
dp[i] += dp[i-j]
return dp[n]