用python快速求解斐波那契数列的某一项
程序员文章站
2024-02-26 19:40:52
...
其实斐波那契数列的形式大家都很清楚:
然后会解常系数二阶齐次线性递归的都知道,它的特征方程和解为:
那么fn的显式形式就很清楚了:
那么用python解求某一项就很快了,要用到sympy这个包:
import sympy as sy
n=sy.symbols('n')#约定变量
f=1/sy.sqrt(5)*(((1+sy.sqrt(5))/2)**n-((1-sy.sqrt(5))/2)**n)#一定要用sy.sqrt()这个函数
for i in range(10):#打印前十项
print(f.subs({n:i}).simplify())#把n=i代入,化简
print(f.subs({n:500}).simplify())#打印第500项
输出:
0
1
1
2
3
5
8
13
21
34
139423224561697880139724382870407283950070256587697307264108962948325571622863290691557658876222521294125
当然如果打表的话,两项两项这样加比较快,但是如果只要某一项呢?很明显套公式会比较快。有的人可能觉得为什么不直接算?反而要用sympy,因为直接算的话,是浮点数,会有误差的!特别是那些开方什么的算多了,误差还挺大的。以上。