python迭代器實現斐波拉契求值

來源:互聯網
上載者:User

標籤:lis   對象   迭代   個數   range   top   簡單   sequence   不同方法   

  斐波那契數列(Fibonacci sequence),又稱黃金分割數列,也稱為“兔子數列”:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)。例如 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........這個數列從第3項開始,每一項都等於前兩項之和,而且當n趨向於無窮大時,前一項與後一項的比值越來越逼近黃金分割比例0.618。

  python中可以被next()函數調用並不斷返回下一個值的對象稱為迭代器。用dir(list),dir(tuple),dir(file),dir(dict)來查看不同類型對象的屬性,會發現它們都有一個名為__iter__的特殊方法,對象有了這個屬性,就能返回迭代器。迭代器不但可以作用於for迴圈,還可以被next()函數不斷調用並返回下一個值,直到最後拋出StopIteration錯誤表示無法繼續返回下一個值了。

  下面是使用不同方法實現斐波拉契求值

1、簡單版本

#!/bin/env pythondef fib(n):    a, b = 0, 1    for i in range(n):        a, b = b, a+b    return aprint ‘f5‘,  fib(5)print ‘f10‘, fib(10)

運行結果

f5 5f10 55

2、遞迴版本

#!/bin/env pythondef fib(n):    if 0 == n:        return 0    elif 1 == n:        return 1    else:        return fib(n-1) + fib(n-2)print ‘f5‘, fib(5)print ‘f10‘, fib(10)

運行結果

f5 5f10 55

3、迭代器版本

class Fib():    def __init__(self, n):        self.a = 0        self.b = 1        self.n = n        self.count = 0    def __iter__(self):        return self    def next(self):        res = self.a        self.a, self.b = self.b, self.a + self.b        if self.count > self.n:            raise StopIteration        self.count += 1        return resprint ‘f5‘, list(Fib(5))print ‘f10‘, list(Fib(10))

運行結果

f5 [0, 1, 1, 2, 3, 5]f10 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

迭代器的使用之地還有很多,例如讀取檔案等

 

python迭代器實現斐波拉契求值

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.