斐波那契的優化

2021-09-17 21:13:05 字數 931 閱讀 1610

普通遞迴實現:

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項開始,每一項...