python實現斐波那契數列:迭代和遞迴對比
阿新 • • 發佈:2019-02-15
迭代和遞迴
從概念上講,遞迴就是指程式呼叫自身的程式設計思想,即一個函式呼叫本身;迭代是利用已知的變數值,根據遞推公式不斷演進得到變數新值得程式設計思想。
對於剛入門的程式設計小白而言,對遞迴的理解應該是要難於對迭代的理解的。下面將以python實現斐波那契數列為例,對比說明迭代和遞迴的區別。
斐波那契數列
斐波那契數列(Fibonacci sequence),又稱黃金分割數列,指的是這樣一個數列:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)。在現代物理、準晶體結構、化學等領域,斐波納契數列都有直接的應用
1.迭代實現
迭代演算法實現程式碼為:
#!/usr/bin/python
# coding=utf-8
from timeit import timeit
def fib(n):
list = [1,1]
if n > 2:
for i in range(2,n,1):
listNew = list[i - 2] + list[i - 1]
list.append(listNew)
return list[n - 1]
n = 35
print('第%d個斐波那契數為%d'%(n,fib(n)))
t = timeit('fib(%d)' %n, 'from __main__ import fib', number=1)
print('遞迴所需時間%fs'%t)
輸出結果為:
第35個斐波那契數為9227465
遞迴所需時間0.000016s
2.遞迴實現
遞迴演算法實現程式碼為:
#!/usr/bin/python
# coding=utf-8
from timeit import timeit
def fib(n):
if n == 1 or n == 2:
return 1
return fib(n - 1) + fib(n - 2)
n = 35
print('第%d個斐波那契數為%d' %(n,fib(n)))
t = timeit('fib(%d)'%n, 'from __main__ import fib', number=1)
print('遞迴所需時間%fs'%t)
輸出結果為:
第35個斐波那契數為9227465
遞迴所需時間4.570864s
結論
用python實現遞迴演算法,程式碼結構較為簡單,但效率非常低下,而迭代演算法可讀性強,執行效率也非常之快。所以在運用遞迴演算法時應謹慎。