这是一种常用的算法,本人摸索出一个规律:
就是 n层阶梯,每次最多m个台阶,一共有F(n) = F(n-1) + F(n-2)+ F(n-m)种走法,或者把上楼层想象为下楼!!!
理论在这:http://www.cnblogs.com/CCBB/archive/2009/04/25/1443441.html
# -*- coding:utf8 -*- class Algorithm: stairs = 10 maxSteps = 2 def calNStep(self, stairs, append=''): if len(append) == Algorithm.stairs: print(append) if stairs < 2: return stairs steps=0 for i in range(self.maxSteps): j=i+1 steps += self.calNStep(stairs - j, append+str(j)*j ) return steps algo = Algorithm() total=algo.calNStep(Algorithm.stairs) print("%d层阶梯,每次最多%d个台阶,一共有%d种走法" %(Algorithm.stairs,Algorithm.maxSteps,total)) # Algorithm.maxSteps=3 # total=algo.calNStep(Algorithm.stairs) # print("%d层阶梯,每次最多%d个台阶,一共有%d种走法" %(Algorithm.stairs,Algorithm.maxSteps,total))
/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/bin/python3.5 /Users/wuqj/PycharmProjects/testPy/step.py 1111111122 1111112222 1111122122 1111221122 1111222222 1112211122 1112212222 1112222122 1122111122 1122112222 1122122122 1122221122 1122222222 1221111122 1221112222 1221122122 1221221122 1221222222 1222211122 1222212222 1222222122 2211111122 2211112222 2211122122 2211221122 2211222222 2212211122 2212212222 2212222122 2222111122 2222112222 2222122122 2222221122 2222222222 10层阶梯,每次最多2个台阶,一共有55种走法 Process finished with exit code 0
我总结了斐波那契数列算法分析的规律, 用python写了一个,希望对大家有帮助。
图:
简单说,就是斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。
递推公式
斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
如果设F(n)为该数列的第n项(n∈N*),那么这句话可以写成如下形式::F(n)=F(n-1)+F(n-2)
显然这是一个线性递推数列。
另外斐波那契数列在实际工作中应该用的很少,尤其是当数据n很大的时候(例如:1000000000),所以综合考虑基本普通的非递归O(n)方法就很好了,没有必要用矩阵乘法。