1.遞迴法
#!/usr/bin/python3#coding=utf-8
def fib_recur(n):
assert n >= 0, "n > 0"
if n <= 1:
return n
return fib_recur(n-1) + fib_recur(n-2)
for i in range(1, 20):
print(i)
print(fib_recur(i), end='\t')
寫法最簡潔,但是效率最低,會出現大量的重複計算,時間複雜度o(1.618^n),而且最深度1000
2.遞推法
#!/usr/bin/python3#coding=utf-8
def fib_loop(n):
a, b = 0, 1
for i in range(n + 1):
a, b = b, a + b
return a
for i in range(20):
print(fib_loop(i), end=' ')
遞推法,就是遞增法,時間複雜度是 o(n),呈線性增長,如果資料量巨大,速度會越拖越慢
3.
def fib_loop_while(max):
a, b = 0, 1
while max > 0:
a, b = b, a + b
max -= 1
yield a
for i in fib_loop_while(10):
print(i)
帶有yield的函式都被看成生成器,生成器是可迭代物件,且具備__iter__ 和 __next__方法, 可以遍歷獲取元素python要求迭代器本身也是可迭代的,所以我們還要為迭代器實現__iter__方法,而__iter__方法要返回乙個迭代器,迭代器自身正是乙個迭代器,所以迭代器的__iter__方法返回自身即可
斐波那契數列 斐波那契數列python實現
斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 ...
python 斐波那契數列
用python寫斐波那契數列當然大家都寫的出來。當時如果用一行 寫呢。本來沒有打算用一行 寫的。後來看到有用一行 寫階乘的。reduce lambda x,y x y,i for i in range 1,n 1 當然在這之前需要 from functools import 好吧,如果你願意,就算兩...
python斐波那契數列
學習過python基礎語法,我們嘗試做乙個簡單的斐波那契數列。斐波納契數列 兩個元素的總和確定了下乙個數 a,b 0,1 while b 10 print b a,b b,a b執行以上程式,輸出 112 358end關鍵字 關鍵字end可以用於將結果輸出到同一行,或者在輸出的末尾新增不同的字元,例...