斐波那契數列:
經典數學問題之一;斐波那契數列,又稱**分割數列,指的是這樣乙個數列:
1、1、2、3、5、8、13、21、……
想必看到這個數列大家很容易的就推算出來後面好幾項的值,那麼到底有什麼規律,簡單說,就是前兩項的和是第三項的值,也許你會想到的是迭代,也學你想到的是遞迴。
簡單分析一下遞迴:
int fibon(int n)
return fibon(n-1) + fibon(n-2);
}
這就是簡單的遞迴,咋先分析一下,若此時你給的n為5,直接到了遞迴這塊,那麼畫個圖分析一下,普通的遞迴:
怎樣優化,很簡單那麼你如果吧已經算過的值,儲存起來下次直接用的話,會不會就遞迴次數明顯減少了。好了下面就有兩個**,乙個是非優化,乙個是優化的。
#includeint n1 = 0;//記錄普通的遞迴次數
int n2 = 0;//優化的遞迴次數
//普通遞迴函式
int fibon(int n)
return fibon(n-1) + fibon(n-2);
}//優化後的遞迴函式
看看結果不難發現優化的好處了吧!
斐波那契數列 遞迴和遞迴優化
斐波那契數列,即兔子問題 演算法筆試題可能會出現 function fun n return fun n 1 fun n 2 效能問題 1,自身巢狀太深,可能會引起堆疊溢位 堆疊溢位 函式呼叫會使用棧來儲存臨時變數。每呼叫乙個函式,都會將臨時變數封裝為棧幀壓入記憶體棧,等函式執行完成返回時,才出棧。...
斐波那契數列普通 遞迴和優化遞迴實現
斐波那契額數列,又稱為 分割數列,指的是這樣乙個數列 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...