斐波那契数列概念
斐波那契数列(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*)
斐波那契数列的实现
根据数列的数学规律,使用递归的方式进行实现,每一个数的计算都需要回溯到初始位上进行推算。
比如斐波那契数列中【1、1、2、3、5、8、13、21、34】,为了求出第8位21的值,即F(8),就要求出F(7)和F(6)的值,而为了
求出第9位的值F(9),同样要回退到计算F(8)的值以及F(7)的值,而这些过程不会因为前面计算过而不需要再计算。
因此这将会在n的值越大的情况下,递归深度越大,同时也浪费时间在同一个数的计算上,相反如果每一次计算出的值都得到记
录,那么就能解决这个问题了,因而引出list的实现。
两种方式的代码实现
# -*- coding: utf-8 -*-
"""
Created on Thu Sep 20 15:44:50 2018
Description:
Version:
@author: HJY
"""
import time
start = time.time()
#递归实现
#运算时间:35个数5.15秒
def fb_iter(n):
if n == 1:
return 0
if n == 2:
return 1
if n >2:
return fb_iter(n-2)+fb_iter(n-1)
#print(fb_iter(35))
#list实现:35个数时间忽略不计
def fb_list(n):
fb_list = [0 for _ in range(n)]
if n == 1:
pass
if n == 2:
fb_list[1] = 1
else:
fb_list[1] = 1
i = 2
while i < n:
fb_list[i] = fb_list[i-1] + fb_list[i-2]
i+=1
return fb_list
print(fb_list(50))
end = time.time()
print(end-start)