使用python迭代器生成斐波那契數列

2021-07-05 08:05:27 字數 2784 閱讀 6419

斐波納契數列以

遞迴的方法定義:f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)(n≥2,n∈n*)

這個數列從第2項開始,每一項都等於前兩項之和,

而且當n趨向於無窮大時,前一項與後一項的比值越來越逼近

**分割

0.618.

首先可以通過簡單的for迴圈實現

#!/usr/bin/env python

def fib(n):

a,b = 0,1

for i in range(n):

a,b =b,a+b

print a

f = fib(10)

print f

通過遞迴函式呼叫實現更明了。

#!/usr/bin/env python

def fib(n):

"""this is fibonacci by recursion.

"""if n==0:

return 0

elif n==1:

return 1

else:

return fib(n-1) + fib(n-2)

if __name__ == "__main__":

f = fib(10)

print f

用dir(list),dir(tuple),dir(file),dir(dict)來檢視不同型別物件的屬性

會發現它們都有乙個名為__iter__的特殊方法,物件有它,就能通過該方法返回迭代器,所謂的迭代器就是具有next()方法的物件,在呼叫next()方法時,

迭代器會返回它的下乙個值。如果next()方法沒有被呼叫,但迭代器沒有值可以返回,就會引發乙個stopiteration異常。

如果列表太大,使用列表會占用太多的記憶體,這時候需要的是迭代物件。

#!/usr/bin/env python

class fibs():

def __init__(self,max):

self.a = 0

self.b = 1

self.max = max

def __iter__(self):

return self

def next(self):

fib = self.a

self.a,self.b = self.b,self.a + self.b

if fib > self.max:

raise stopiteration

return fib

if __name__ == "__main__":

fibs = fibs(10000)

print list(fibs)

$python fib.py

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]

如果乙個類想被用於for迴圈,類似list或tuple那樣,通過__iter__方法返回迭代物件可以實現。

if __name__=="__main__"

fibs = fibs(10000)

lst =

for f in fibs:

print lst

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765]

若要在斐波那契數列中找出大於1000的最小的數,一定記得要加break

1 #!/usr/bin/env python

2 class fibs():

3 def __init__(self):

4 self.a = 0

5 self.b = 1

6 def __iter__(self):

7 return self

8 def next(self):

9 fib = self.a

10 self.a,self.b = self.b,self.a + self.b

11 return fib

12 if __name__ == "__main__":

13 fibs = fibs()

14

15 for f in fibs:

16

17 if f > 7000:

18 print f

19 break

10946

python自定義迭代器應用 生成斐波那契數列

再類中,定義了 iter self 方法就成為了可迭代物件,再在定義乙個 next self 方法最終成為迭代器 迭代器是在你要用的時候再給你造乙個值,相當於買手抓餅,你說要買的時候人家才給你現場做,節約了記憶體。classa def init self,num self.num num self....

python迭代器實現斐波那契數列

什麼是迭代器,作用是什麼。迭代器實現斐波那契數列。1.概念 從容器中取資料的工具就是迭代器 游標 2.作用 可以節省大量的記憶體空間 0,1,1,2,3,5,8,13,21,34 初始值 a 0 b 1 游標 當前數值 index 0 斐波那契數列最大數量為 num num根據需求建立乙個類 cla...

Python迭代器實現斐波那契數列

python 處理 for 迴圈時,首先會呼叫 something.iter 返回 something 對應的迭代器 假設叫 it 而後,for 迴圈會呼叫 it.next 獲取迭代器的下乙個元素,並賦值給 x,然後執行迴圈體 執行完後,for 迴圈會繼續呼叫 it.next 獲取迭代器的下乙個元素...