普通遞迴實現:
def fib(n):
if n == 0:
return 1
if n == 1:
return 1
if n > 1:
return fib(n-1) + fib(n-2)
import time
t1 = time.time()
print(fib(40))
t2 = time.time()
print(t2-t1)
#執行結果為
165580141
53.53498697280884
上方時間花費在求重複的值上,例如fib(40)=fib(39)+fib(38),fib(39)=fib(38)+fib(37)這裡fib(38)就會被求兩次,fib(37),fib(36)...也是。
如果在這兒加入快取,將每次求出來的結果儲存到陣列,就會節省大部分時間。實現如下。
快取機制求斐波那契:
def fib(n):
if n == 0:
return 1
if n == 1:
return 1
arr = [1 for i in range(n+1)]
for i in range(2, n+1):
arr[i] = arr[i-1] + arr[i-2]
return arr[n]
import time
t1 = time.time()
print(fib(40))
t2 = time.time()
print(t2-t1)
#執行結果:
165580141
0.00018906593322753906
由圖可知,時間從53秒優化到8毫秒。 遞迴優化 斐波那契
f n f n 1 f n 2 1,2,3,5,8.自頂向下使用的遞迴層次比較多,在n取值較大的情況下,效率很低 時間維度 所以可以使用陣列來替換多重遞迴呼叫,即以空間來置換時間 intersting include include include include include include d...
斐波那契Fibonacci 演算法優化
方法一 遞迴法 int fib int n 遞迴法的時間複雜度為o 2 n 遞迴演算法的程式看上去很簡潔,但實際上執行起來卻不如此,深度的遞迴會占用很多棧空間,容易造成溢位。另外在遞迴計算fibonacci數列過程中有很多重複計算。比如,計算f 5 需要計算f 4 f 3 計算f 4 時又要計算一遍...
斐波那契數列解析優化
斐波那契數列 fibonacci sequence 又稱 分割數列 兔子數列,是數學家列昂納多 斐波那契於1202年提出的數列。斐波那契數列為1 1 2 3 5 8 13 21 34 前兩項都為1,遞推公式為f n f n 1 f n 2 n 3,f 1 1,f 2 1。這個數列從第3項開始,每一項...