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');