使用遞迴解決斐波那契數列的效能問題

2022-01-28 16:56:45 字數 1368 閱讀 5866

我們知道斐波那契數列(也稱作兔子數列)  1,1,2,3,5,8,13,21,34。。。。。

前兩位數固定是1,之後每一位數都是前兩位數的之和,這樣的數列就是斐波那契數列

那麼我們要求這樣的數列,就必須要求n-1和n-2位數

function getfb(n)

else

}console.log(getfb(

10));

求斐波那契數列的第十位   在控制台中列印出來的是 55

那麼  第五十位呢?。。。。。。。。。

很好,我的瀏覽器卡死崩潰了

由此我們可知,這樣求斐波那契數列實在是太浪費效能了

既然有問題我們就來解決它

那麼   求斐波那契數列的時候是為什麼會浪費效能呢?

原因就是瀏覽器求了太多重複項

var i = 0; //

宣告乙個變數,用來記錄呼叫getfb()方法的次數

function

getfb(n)

else

}console.log(getfb(20));// 我的瀏覽器求不出來這麼多項 所以換了小一點的數字

console.log(i);
求斐波那契數列的第20位會呼叫13529次函式

那麼求第30位呢?

多達16萬次

第40位呢?第50 位呢?。。。。。。。

所以這個樣子實在是太浪費效能了

解決問題的思路:我們把已經求過的項用乙個變數儲存起來,如果下次還需要用到這個項就直接取出來用,而不是再去呼叫函式

var i = 0;//

宣告乙個變數i,記錄呼叫getfb這個函式的次數.

//宣告乙個物件obj,用來儲存已經求過的項.

var obj ={};

function

getfb(n)

else

else}}

console.log(getfb(60));

console.log(i);

那麼我們就來看看結果吧

斐波那契數列的第60位大的嚇人,但是我們卻也只呼叫了117次函式,極大的提高了效能

使用遞迴解決斐波那契數列的效能問題

原文 使用遞迴解決斐波那契數列的效能問題 我們知道斐波那契數列 也稱作兔子數列 1,1,2,3,5,8,13,21,34。前兩位數固定是1,之後每一位數都是前兩位數的之和,這樣的數列就是斐波那契數列 那麼我們要求這樣的數列,就必須要求n 1和n 2位數 function getfb n else c...

使用遞迴解決斐波那契數列的效能問題

原文 使用遞迴解決斐波那契數列的效能問題 我們知道斐波那契數列 也稱作兔子數列 1,1,2,3,5,8,13,21,34。前兩位數固定是1,之後每一位數都是前兩位數的之和,這樣的數列就是斐波那契數列 那麼我們要求這樣的數列,就必須要求n 1和n 2位數 function getfb n else c...

遞迴與斐波那契數列

迭代實現 def fab n a1 1 a2 1 a3 1if n 1 print 輸入有誤 return 1 while n 2 0 a3 a1 a2 a1 a2 a2 a3 a 1return a3 result fab 20 if result 1 print 總共有 d對小兔子誕生 resu...