Fibonacci(斐波那契)數列的遞迴與非遞迴實現 python
阿新 • • 發佈:2019-02-19
Fibonacci數列為:0、1、1、2、3、5、8、13、21......
數列第一項為0,第二項為1,從第三項開始,每一項為相鄰前兩項之和。
用遞迴的方法來定義:
- F(0) = 0
- F(1) = 1
- F(n) = F(n-1) + F(n-2) , n>=2
用遞迴方法實現程式碼:
# python 3.4 x = int ( input ("輸入一個數:") ) def fibonacci ( n ) : if n == 0 : return 0 elif n == 1 : return 1 else : return fibonacci( n - 1 ) + fibonacci( n - 2 ) for i in range ( 0 , x ) : print(fibonacci(i))
用非遞迴方法實現程式碼:
(其實只需要兩個變數就ok了)# python 3.4 x = int ( input ("輸入一個數:") ) arr = [ 0, 1, 1 ] #計算陣列中任意一項,需要用到的變數不超過3個,因此只需要用一個長度為3的陣列 for i in range(0 , x ): print ( str(arr[i%3])+" " ) #第n祥依次放在下標為n%3的陣列中 arr[i%3]=arr[(i+1)%3] + arr[(i+2)%3] #將該陣列看成一個迴圈連結串列,則每一項輸出後,相應的位置用來放項數比它大3的值,而這個值就是陣列的後兩項想加
用遞迴方法程式清晰易懂,但是開銷大。分別給兩個程式加一個計時語句,看看n = 30 時兩個程式執行時間相差多少。
修改後的程式碼:
# python 3.4 from time import clock x = int ( input ("輸入一個數:") ) clock() def fibonacci ( n ) : if n == 0 : return 0 elif n == 1 : return 1 else : return fibonacci( n - 1 ) + fibonacci( n - 2 ) for i in range ( 0 , x ) : print(fibonacci(i)) print("running time is %-5.5ss" %clock())
# python 3.4
from time import clock
x = int ( input ("輸入一個數:") )
clock()
arr = [ 0, 1, 1 ]
for i in range(0 , x ):
print ( str(arr[i%3])+" " )
arr[i%3]=arr[(i+1)%3] + arr[(i+2)%3]
print("running time is %-5.5ss" %clock())
執行結果分別是:
遞迴方法求解:
非遞迴方法求解: