python實(shí)現(xiàn)斐波那契數(shù)列的方法示例
介紹
斐波那契數(shù)列,又稱黃金分割數(shù)列,指的是這樣一個(gè)數(shù)列:0、1、1、2、3、5、8、13、21、……在數(shù)學(xué)上,斐波納契數(shù)列以如下遞歸的方法定義:
F(0)=0,F(xiàn)(1)=1,F(xiàn)(n)=F(n-1)+F(n-2)(n≥2,n∈N*) 。

1. 元組實(shí)現(xiàn)
fibs = [0, 1] for i in range(8): fibs.append(fibs[-2] + fibs[-1])
這能得到一個(gè)在指定范圍內(nèi)的斐波那契數(shù)列的列表。
2. 迭代器實(shí)現(xiàn)
class Fibs: def __init__(self): self.a = 0 self.b = 1 def next(self): self.a, self.b = self.b, self.a + self.b return self.a def __iter__(self): return self
這將得到一個(gè)無(wú)窮的數(shù)列,可以采用如下方式訪問(wèn):
fibs = Fibs() for f in fibs: if f > 1000: print f break else: print f
3. 通過(guò)定制類實(shí)現(xiàn)
class Fib(object):
def __getitem__(self, n):
if isinstance(n, int):
a, b = 1, 1
for x in range(n):
a, b = b, a + b
return a
elif isinstance(n, slice):
start = n.start
stop = n.stop
a, b = 1, 1
L = []
for x in range(stop):
if x >= start:
L.append(a)
a, b = b, a + b
return L
else:
raise TypeError("Fib indices must be integers")
這樣可以得到一個(gè)類似于序列的數(shù)據(jù)結(jié)構(gòu),可以通過(guò)下標(biāo)來(lái)訪問(wèn)數(shù)據(jù):
f = Fib() print f[0:5] print f[:10]
4.Python實(shí)現(xiàn)比較簡(jiǎn)易的斐波那契數(shù)列示例
先放一個(gè)斐波那契數(shù)列出來(lái)瞧瞧…
0 1 1 2 3 5 8 13 21 34 55 89 144 233...
首先給頭兩個(gè)變量賦值:
i, j = 0, 1
當(dāng)然也可以這樣寫:
i = 0 j = 1
接著定個(gè)范圍,就10000之內(nèi)好了:
while i < 10000:
然后在while語(yǔ)句中輸出i并設(shè)計(jì)邏輯:
print i, i, j = j, i+j
在這里需要注意:“i, j = i, i+j”這條代碼不能寫成如下所示:
i = j j = i+j
如果寫成這樣,j就不是前兩位相加的值,而是已經(jīng)被j賦過(guò)值的i和j相加的值,這樣的話輸出的數(shù)列會(huì)如下所示:
0 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192
正確的整片代碼如下所示:
i, j = 0, 1 while i < 10000: print i, i, j = j, i+j
最后展示運(yùn)行結(jié)果:
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
總結(jié)
以上就是關(guān)于利用Python實(shí)現(xiàn)斐波那契數(shù)列的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。
相關(guān)文章
如何利用Python獲取鼠標(biāo)在屏幕上的具體位置以及動(dòng)作
這篇文章主要為大家詳細(xì)介紹了如何使用python實(shí)現(xiàn)獲取鼠標(biāo)在屏幕上的具體位置以及動(dòng)作,從而判斷鼠標(biāo)是否在瀏覽器內(nèi),感興趣的小伙伴可以了解下2025-03-03
flask連接并操作數(shù)據(jù)庫(kù)的實(shí)現(xiàn)示例
本文詳細(xì)介紹了在Flask框架中連接并操作數(shù)據(jù)庫(kù)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12
jupyter notebook 實(shí)現(xiàn)matplotlib圖動(dòng)態(tài)刷新
這篇文章主要介紹了jupyter notebook 實(shí)現(xiàn)matplotlib圖動(dòng)態(tài)刷新,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
Python隨機(jī)生成手機(jī)號(hào)、數(shù)字的方法詳解
這篇文章主要介紹了Python隨機(jī)生成手機(jī)號(hào)、數(shù)字的方法,結(jié)合完整實(shí)例形式分析了Python編程生成隨機(jī)手機(jī)號(hào)與數(shù)字的實(shí)現(xiàn)方法及相關(guān)函數(shù)用法,需要的朋友可以參考下2017-07-07
使用OpenCV獲取圖像某點(diǎn)的顏色值,并設(shè)置某點(diǎn)的顏色
這篇文章主要介紹了使用OpenCV獲取圖像某點(diǎn)的顏色值,并設(shè)置某點(diǎn)的顏色,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
Python使用mmap實(shí)現(xiàn)內(nèi)存映射文件操作
內(nèi)存映射通??梢蕴岣逫/O的性能,本文主要介紹了Python使用mmap實(shí)現(xiàn)內(nèi)存映射文件操作,分享給大家,感興趣的可以了解一下2021-06-06

