欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

用python快速求解斐波那契数列的某一项

程序员文章站 2024-02-26 19:40:52
...

其实斐波那契数列的形式大家都很清楚:

用python快速求解斐波那契数列的某一项


然后会解常系数二阶齐次线性递归的都知道,它的特征方程和解为:

用python快速求解斐波那契数列的某一项


那么fn的显式形式就很清楚了:

用python快速求解斐波那契数列的某一项

用python快速求解斐波那契数列的某一项

那么用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,因为直接算的话,是浮点数,会有误差的!特别是那些开方什么的算多了,误差还挺大的。以上。