/*斐波那契數列 源代碼分析 f(x) = 1 ; 當 x < 2 ; f(x) = f(x-1)+f(x-2); 當 x >= 2 ; 通項式爲:fn ={((1+根號5)/2)^n-((1-根號5)/2)^n}/(根號5) 則根據通項式構造函數求fn; */ //計時函數 console.time() //計時開始 console.timeEnd() //計時結束並輸出時長 console.time(); var i; var total; //方法一 使用原始方法 function fibo(i) { if(i == 0){ return 1; }else if(i == 1){ return 1; }else{ total = fibo(i-1) + fibo(i-2); return total; } } //方法二 使用迭代解法, 將每一次執行的數據保存起來,時間會大大縮短 function fibo1(i) { if(i<=1){ return 1; } var pre = 1; var prepre = 1; for(j = 2; j <= i; j++){ total = pre + prepre; prepre = pre; pre = total; } return total; } console.log(fibo(40));//結果爲:165580141 時間爲:2313.9990234375ms;
console.log(fibo1(40));//結果爲:165580141 時間爲:0.805908203125ms;
console.timeEnd();
對比結果可能fibo1函數明顯比fibo函數優化的明顯,時間複雜度爲O(x);html
fibo1的思路爲:將每一次遞歸的數值保存起來,後期就不須要再次的尋找;函數
關於斐波那契數列優化的方法還有不少,這裏先將這一種,還有一些涉及到比較難懂的高等數學,對於初學者會比較的難學;優化
注意:上述代碼爲js代碼,請嵌入到html文件中運行;spa
計時函數 console.time() //計時開始code
console.timeEnd() //計時結束並輸出時長htm
單位以ms來計算;blog