Fibonacci数列递归实现

Posted leo-skr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fibonacci数列递归实现相关的知识,希望对你有一定的参考价值。

一、什么是Fibonacci数列?

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

由定义可知,这个数列从第3项开始,每一项都等于前两项之和。
参考资料 斐波那契数列_百度百科

二、给出Fibonacci数列的递归表达式。

def fib(n):
return 1 and n <= 2 or fib(n - 1) +fib(n - 2)
print(‘ the answer is %d‘%(fib(10)))

三、用python或scratch递归实现Fib(n),并进行测试,在你的计算机上1分钟内能计算出fib(10),fib(100),fib(1000),fib(10000)吗?

1.fib(10)

技术图片

用时0.057秒

2.fib(100)

技术图片

如图,在等候了三分多钟依旧无果后,我手动停止了它的运行(因为风扇声实在太大了,跑不动啊!)

3.fib(1000)及fib(10000)

没有尝试,但根据fib(100)的情况来看,应该也跑不动。

四、反击篇!

在参考了下方网站后:
python 入门之斐波那契数列递归表达式算法和非递归算法

此时我发现该网站中所给的非递归算法解决fib(n)的问题很快

而且明白了原因,其原因是:

  • 1.递归算法时间复杂度为:O(2^N)----太耗时间
  • 2.非递归算法时间和空间复杂度都为:O(N)

运行非递归代码计算fib(100)、fib(1000)及fib(10000)

fib(100)

技术图片

fib(1000)

技术图片

fib(10000)

技术图片

以上是关于Fibonacci数列递归实现的主要内容,如果未能解决你的问题,请参考以下文章

Fibonacci数列

Fibonacci数列递归实现

利用JavaScript打印出Fibonacci数(不使用全局变量)

Fibonacci数

fibonacci数列的性质和实现方法

Java斐波那契数列(Fibonacci Sequence兔子数列)的3种计算方法(递归实现递归值缓存实现循环实现)