要計算斐波納契數列的第n項,我已經熟悉的遞歸函數:JavaScript的斐波那契記憶化
var fibonacci = function(index){
if(index<=0){ return 0; }
if(index===1){ return 1; }
if(index===2){ return 2; }
return fibonacci(index-2) + fibonacci(index-1);
}
可正常工作。現在,我想計算的指數存儲在一個對象:
var results = {
0: 0,
1: 1,
2: 2
};
var fibonacci = function(index){
if(index<=0){ return 0; }
if(index===1){ return 1; }
if(index===2){ return 2; }
if(!results[index]){
results[index] = fibonacci(index-2) + fibonacci(index-1);
}
}
我知道這是不是實際上提高了性能,因爲我沒有訪問結果對象,但我想先確認一下,我的成績目標是在記憶前正確填寫。不幸的是,事實並非如此。對於斐波納契(9),我得到:
Object {0: 0, 1: 1, 2: 2, 3: 3, 4: NaN, 5: NaN, 6: NaN, 7: NaN, 8: NaN, 9: NaN}
爲什麼我得到NaN指數超過3?
因爲你的函數不返回任何東西當指數> 2. – JJJ
@Juhana哦,我很愚蠢的人。謝謝。你能否提交答案以便我可以接受? – PDN
與您的問題沒有直接關係,但是如果您預先填充了'results'數組,那麼您爲什麼還需要在函數內顯式測試'index'?另外,我相信'fib(2)'是'1'。 –