fib python python 斐波那契數列

2021-10-11 12:43:26 字數 976 閱讀 2024

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__方法返回自身即可

斐波那契數

入門訓練 fibonacci數列 時間限制 1.0s 記憶體限制 256.0mb 問題描述 fibonacci數列的遞推公式為 fn fn 1 fn 2,其中f1 f2 1。當n比較大時,fn也非常大,現在我們想知道,fn除以10007的餘數是多少。輸入格式 輸入包含乙個整數n。輸出格式 輸出一行,...

斐波那契數

斐波那契數列 fibonacci sequence 簡介 斐波那契數列 fibonacci sequence 又稱 分割 數列 因 數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 ...

斐波那契數

遞迴演算法是不可取的。由於效率非常低,並且還有棧溢位的風險。應該使用例如以下的迭代解法 int fibonacci unsigned int n if n 1 int i 0,j 1,m unsigned int k for k 2 k n k return m 可是對於這題來說。上面的 還是不行的...