1. 程式人生 > >python實現斐波那契數列:迭代和遞迴對比

python實現斐波那契數列:迭代和遞迴對比

迭代和遞迴

從概念上講,遞迴就是指程式呼叫自身的程式設計思想,即一個函式呼叫本身;迭代是利用已知的變數值,根據遞推公式不斷演進得到變數新值得程式設計思想。
對於剛入門的程式設計小白而言,對遞迴的理解應該是要難於對迭代的理解的。下面將以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實現遞迴演算法,程式碼結構較為簡單,但效率非常低下,而迭代演算法可讀性強,執行效率也非常之快。所以在運用遞迴演算法時應謹慎。