題目描述:
大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。
n<=39
解題方案:
首先就像用生成器的方法,但是這裡沒有太大的用。因為題目要求輸出第n個數,而不是輸出前n個數。不過還是採用了生成器的方法。
# -*- coding:utf-8 -*-
class solution:
def fib_loop_while(self, max):
a, b = 0, 1
while max > 0:
a, b = b, a + b
max -= 1
yield a
def fibonacci(self, n):
# write code here
result = self.fib_loop_while(n)
return next(result)
另外網上查詢的乙個有效方法,採用類實現內部魔法方法,定義迭代器。主要是實現iter()方法和next()方法。
class fibonacci(object):
"""斐波那契數列迭代器"""
def __init__(self, n):
""":param n:int 指 生成數列的個數
"""self.n = n
# 儲存當前生成到的資料列的第幾個資料,生成器中性質,記錄位置,下乙個位置的資料
self.current = 0
# 兩個初始值
self.a = 0
self.b = 1
def __next__(self):
"""當使用next()函式呼叫時,就會獲取下乙個數"""
if self.current < self.n:
self.a, self.b = self.b, self.a + self.b
self.current += 1
return self.a
else:
raise stopiteration
def __iter__(self):
"""迭代器的__iter__ 返回自身即可"""
return self
if __name__ == '__main__':
fib = fibonacci(15)
for num in fib:
print(num)
牛客網 斐波那契數列
題目 大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項,n 39。斐波那契數列 斐波那契數列指的是這樣乙個數列 1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,2...
牛客 斐波那契數列
大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項 從0開始,第0項為0 n 39 最後比較兩種方法雖然都是可以通過題目中的測試用例,但是使用遞迴方法的執行時間明顯比使用迭代方法的執行時間 原因 使用迭代的方法的時候重複計算,而且重複的情況還很嚴重,舉個例子,n 4,看看程...
py 斐波那契數列
usr bin python3 fibonacci series 斐波納契數列 兩個元素的總和確定了下乙個數 理解 每乙個新出現的值都是b,則原來b值成為a值。ps 注重對原有值的保留 直接解法 a,b 0,1 while b 10 print b a,b b,a b 其中 a,b b,a b 的計...