Fibnacci数列递归实现

Fibnacci数列递归实现

什么Fibnacci数列

通过查阅斐波那契数列,其中,它是这么说的:

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)

总结而言,斐波那契数列从第三项开始,每一项的值都是前两项的和。

递归表达式

def fib(n):
 return 1 and n <= 2 or fib(n - 1) +fib(n - 2)
print('%d'%(fib(10)))

python实现结果

尝试fib(100)、fib(1000)、fib(10000)

在尝试fib(100)的时候,我就放弃了,因为运行了好一会儿都没有运行出结果。100尚且如此,何况后面的大数字,我害怕把我的电脑搞崩,就强制停止了程序运行,自然肯定没有一分钟以内运行出结果了。

解决问题

以上是通过递归算法实现的斐波那契数列的运算,还有种是用非递归的方法,参考了Fibonacci数列的递归与非递归实现以及python 入门之斐波那契数列递归表达式算法和非递归算法
其中,第二篇博客中指出:

总结为什么使用递归方式实现算法很长时间算不出来的原因:
(1) 递归算法时间复杂度为:O(2^N)----太耗时间
(2) 非递归算法时间和空间复杂度都为:O(N)

代码如下:

def fib(n):
    last = 1
    now = 1
    fibnext = 1
    for i in range(n):
        if i < 2:
            fibnext = 1
        else:
            fibnext = last + now
            last = now 
            now = fibnext
    return fibnext

print("%d"%(fib(10000)))    #或fib(100)或fib(1000)

运行结果如下:

可以看到运行速度非常快,几乎是电光火石之间。

posted @ 2021-11-01 19:01  20211408王其  阅读(135)  评论(0编辑  收藏  举报