斐波那契数列(Fibonacci sequence) 1 1 2 3 5 8 13 21 34 55 89 ...

斐波那契数列也称为神秘数列,从第三项开始,各个数列之间相互之间维持着固定的比率,每一项都等于前两项的和。

斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2) (n ≥ 3,n ∈ N*)。

从第三项开始,前一项除以后一项的值会越来越接近0.618这个黄金分割比例。黄金分割也是从斐波那契数列演变而来。


据说,达芬奇著名的蒙娜丽莎,就是符合斐波那契曲线构图的。


据说,很多植物的特征和自然界中都暗合斐波那契数的规律。


image.png






使用Scratch求n项斐波那契数列如下:(前20项斐波那契数列放入列表中显示)


image.png



Python求解如下:

# 1.递推方法 比递归效率高
a, b = 0, 1
for num in range(1, 101):
   a, b = b, a+b
   print(num, a)

递归方法虽然逻辑清晰,实现相对容易,但是执行上空间复杂度和时间复杂度较高,容易爆函数栈,有兴趣可以查阅相应资料。

# 2.递归方式  效率比较低 如果不优化 计算到100 可能就要5000亿年

def fib(n):
   if n in (1, 2):  # 如何n为第一项或者第二项返回值 1
       
return 1
   
return fib(n-1)+fib(n-2)

for i in range(1,101):
   print(i, fib(i))


# 3.递归方式优化 用一个字典来存储已经得出的数值 执行效率大为提高,只是相对于递推方式需要额外空间存储已经算出来的值

def fib(n,temp={}):
   if n in (1,2):
       return 1
   
if n not in temp:
       temp[n] = fib(n-1)+fib(n-2)
   return temp[n]

for i in range(1,101):
   print(i, fib(i))




0 评论 最近

没有评论!