python3中斐波那契數列演算法的實現方法
阿新 • • 發佈:2019-02-18
斐波那契數列的定義
斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……
斐波那契數列,簡單地說,起始兩項為0和1,此後的項分別為它的前兩項之後,即f(0) = 1,f(1) = 1,f(n) = f(n-1) + f(n-2)。
實現方式一:
根據斐波那契數列的特性,可以採用基本方法簡單實現:
i, j = 0, 1 while i < 10000: print(i) i, j = j, i+j
實現方式二:
考慮到從第三項開始,每一項的值都為前面兩項的和,可以使用遞迴的方法來計算:
def recursion_fibo(n): """遞迴函式 輸出斐波那契數列""" if n <= 1: return n else: return(recursion_fibo(n-1) + recursion_fibo(n-2)) # 獲取使用者輸入 nterms = int(input("您要輸出幾項? ")) # 檢查輸入的數字是否正確 if nterms <= 0: print("輸入正數") else: print("斐波那契數列:") for i in range(nterms): print(recursion_fibo(i))
實現方式三:
以上採用的是遞迴的實現方式,相比較而言,使用迭代會更加高效,以下函式會返回一個列表:
class Fib: def __init__(self): self.prev = 0 self.curr = 1 def __iter__(self): return self def __next__(self): value = self.curr self.curr += self.prev self.prev = value return value ff = [next(Fib()) for i in range(10)] ff