var memoizer = function (init_mem, f) {
var memoizer_helper = function(x) {
var val = init_mem[x];
if (val === undefined) {
val = f(memoizer_helper, x);
init_mem[x] = val;
}
return val;
};
return memoizer_helper;
};
var fib_memoizer = memoizer([0, 1], function(fib, n) {
return fib(n - 1) + fib(n - 2);
});
console.log(fib_memoizer(10));
var fac_memoizer = memoizer([1, 1], function(fac, n) {
return n * fac(n - 1);
});
console.log(fac_memoizer(5));