斐波那契數列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
求斐波那契數列第 n 項的值:
方法一:遞歸
function fibonacci(n) {if (!Number.isSafeInteger(n) || n < 0) {return;}if (n === 0 || n === 1) {return n;} else {return fibonacci(n - 1) + fibonacci(n - 2);}
}
?
方法二:循環
?
function fibonacci(n) {if (!Number.isSafeInteger(n) || n < 0) {return;}if (n === 0) {return n;}var item1 = 1, item2 = 1, sum = 0;for (var i = 1; i < n; i++) {sum = item1 + item2;item1 = item2;item2 = sum;}return item1;
}
?
用 Memoization 函數優化計算:
function memoization(func) { // Memoization 用于優化比較耗時的計算,通過將計算結果緩存到內存中,這樣對于同樣的輸入值,下次只需要中內存中讀取結果var cache = {};return function() {var key = arguments[0];if (cache[key]) {return cache[key];} else {var val = func.apply(this, arguments);cache[key] = val;return val;}};
}var fibonacci = memoization(function(n) {return (n === 0 || n === 1) ? n : fibonacci(n - 1) + fibonacci(n - 2);
});
?