《剑指offer》c++版本 10. 斐波那契数列
如題:
大家都知道斐波那契數(shù)列,現(xiàn)在要求輸入一個整數(shù)n,請你輸出斐波那契數(shù)列的第n項(從0開始,第0項為0)。這道題基本上學(xué)過算法的人都直到,斐波那契數(shù)列即,即1,1,2,3,5.......
用數(shù)學(xué)公式描述即 f(n) = f(n-1) + f(n-2),很多教科書上都提供了遞歸算法,雖然,能夠滿足,但是效率是在太低了,存在大量重復(fù)計算,比如,計算f(5)的時候,需要計算f(4)和f(3),計算f(6)的時候,需要計算f(4)和f(5),顯然,f(4)和f(5)重復(fù)計算了,隨著n的增大,重復(fù)計算量越來越多。
為了減少重復(fù)計算量,此題最好的方式是使用循環(huán)法,不僅僅是此題,平常運用遞歸求解問題的時候,也要注意是否存在重復(fù)計算,如果存在的話,則需使用循環(huán)法求解。再循環(huán)體中保存前一步得到的值即可。思想上有點類似dp動態(tài)規(guī)劃。
此題變種有很多,例如,青蛙跳臺階,仔細(xì)分析,本質(zhì)上也是求斐波那契數(shù)列問題。
本題的c++解法如下:
//f(n) = f(n-1) + f(n-2); class Solution { public:int Fibonacci(int n) {int i = 3, v1 = 1, v2 = 1, val;//特殊情況處理if (n < 1)return 0;if (n < 3)return 1;//循環(huán)求解,保存上一步得到的值while (i <= n){val = v1 + v2;v1 = v2;v2 = val;i++;}return val;} };=============================================================================================
Linux應(yīng)用程序、內(nèi)核、驅(qū)動、后臺開發(fā)交流討論群(745510310),感興趣的同學(xué)可以加群討論、交流、資料查找等,前進的道路上,你不是一個人奧^_^。
總結(jié)
以上是生活随笔為你收集整理的《剑指offer》c++版本 10. 斐波那契数列的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《剑指offer》c++版本 9. 用两
- 下一篇: 《剑指offer》c++版本 11. 旋