斐波那契數列 遞迴和遞迴優化

2022-05-23 14:36:14 字數 874 閱讀 4613

斐波那契數列,即兔子問題;演算法筆試題可能會出現;

function fun($n)

return fun($n-1) + fun($n-2

);}

效能問題: 1,自身巢狀太深,可能會引起堆疊溢位; 

堆疊溢位:函式呼叫會使用棧來儲存臨時變數。每呼叫乙個函式,都會將臨時變數封裝為棧幀壓入記憶體棧,等函式執行完成返回時,才出棧。系統棧或者虛擬機器棧空間一般都不大。如果遞迴求解的資料規模很大,呼叫層次很深,一直壓入棧,就會有堆疊溢位的風險。

2,重複計算,拖慢計算速度;

優化方面:

1,遞迴方式的優化:

$a = 1

;$b = 1

;function fun($a, $b, $n)

return $a;

}

2,非遞迴方式:

function fun($n)

$a = $b = 1

;

for($i=2; $i<$n; $i++)

return $b;

}

測試 n = 20 的時候的結果:

//

遞迴未優化

值:6765

0.00088596343994141

遞迴次數:

13529

//遞迴優化

值:6765

4.0531158447266e-6

遞迴次數:

19//

非遞迴值:6765

3.0994415283203e-6

遞迴次數:

1

綜上所述,效能方面: 非遞迴 > 優化的遞迴 > 未優化後的遞迴

斐波那契數列 遞迴和遞迴優化

斐波那契數列 經典數學問題之一 斐波那契數列,又稱 分割數列,指的是這樣乙個數列 1 1 2 3 5 8 13 21 想必看到這個數列大家很容易的就推算出來後面好幾項的值,那麼到底有什麼規律,簡單說,就是前兩項的和是第三項的值,也許你會想到的是迭代,也學你想到的是遞迴。簡單分析一下遞迴 int fi...

斐波那契數列普通 遞迴和優化遞迴實現

斐波那契額數列,又稱為 分割數列,指的是這樣乙個數列 1 1 2 3 5 8 13 21 簡單來說就是前兩項的和是第三項的值。1 普通實現 迭代 include using namespace std intfibon int n return c int main 2 遞迴實現 include u...

遞迴優化 斐波那契

f n f n 1 f n 2 1,2,3,5,8.自頂向下使用的遞迴層次比較多,在n取值較大的情況下,效率很低 時間維度 所以可以使用陣列來替換多重遞迴呼叫,即以空間來置換時間 intersting include include include include include include d...