Fibonacci序列传统上用于解释树递归。
function fibonacci(n) {
if(n==0 || n == 1)
return n;
return fibonacci(n-1) + fibonacci(n-2);}
我想实现memoization解决方案。这是我的代码:
var fibonacci = (function(){
var cache = [];
return function(n){
if(n==0 || n == 1){
return n;
}else{
cache[n-1] = cache[n-1]||fibonacci(n-1);
cache[n-2] = cache[n-2]||fibonacci(n-2);
return cache[n-1]+cache[n-2];
}
}
})();
但这是另一个被许多人投票选为最佳实践的答案:
var fibonacci = (function () {
var cache = {};
return function(n) {
// Base case
if(n==0 || n == 1)
return n;
// Recurse only if necessary
if(cache[n-2] === undefined)
cache[n-2] = fibonacci(n-2);
if(cache[n-1] === undefined)
cache[n-1] = fibonacci(n-1);
return cache[n-1] + cache[n-2];
};
})();
我想知道在memoizition中使用数组和对象作为缓存有什么不同?
答案 0 :(得分:0)
数组和对象之间始终存在相同的差异。
假设数组针对整数属性进行了优化,而对象在各种属性名称上做得更好,特别是稀疏属性。对于您的应用,斐波纳契序列,阵列确实更适合。