斐波納契數列以
遞迴的方法定義: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 獲取迭代器的下乙個元素...