2007-07-27

 

算法学习:楼梯问题

需求:

有一个台阶数为N的楼梯,可以有两种等楼梯的方法:一次上一阶,或者一次上两阶.问对于N阶楼梯,共有多少种不同的上法?
如:
N=1:  1种
N=3:  3种(1+1+1, 1+2, 2+1)
N=4:  5种(1+1+1+1, 1+2+1, 1+1+2, ,2+1+1, 2+2)

算法:

1.这个题目咋一看似乎是数的拆分问题的一种,可以用解决拆分问题的方法来解决.

2.比较简单的方法是递推求解:
设Y为台阶数为N时,上楼梯的方法数.则:
N=1, Y=1
N=2, Y=2
N=3, Y=3
N=4, Y=5
N=5, Y=8
......
如果仔细观察Y值,可以发现满足Fibonacci数列.可是我不会证明,记得以前我们高中老师证明过一次,可是当时就没有看懂.
如果这样,解法就相当简单了.
def Stairways(N):
    a,b=0,1
    for i in xrange(n):
        a,b=b,a+b
    return b

讨论:

如果题目要求打印出所有的方法步骤,还是使用拆分发比较好.

Comments: 发表评论



<< Home

This page is powered by Blogger. Isn't yours?