memoization
by upigilam
JavaScript
function mem(fun) {
var cache = [];
return function(n) {
var idx = n.toString();
if (!cache[idx]) {
cache[idx] = fun(idx);
console.log('caching :: ', cache[idx]);
}
console.log('already cached :: ', cache[idx]);
return cache[idx];
};
}
// 0 1 1 2 3....
function fib(n) {
return n === 0 ? 0 :
n === 1 ? 1 :
fib(n-1) + fib(n-2);
}
var mem_fib = mem(fib);
console.time('nonmem');
console.log('fib:: ',fib(7));
console.timeEnd('nonmem');
console.time('mem');
console.log('fib:: ',mem_fib(7));
console.timeEnd('mem');