Factorial wit memorization
JavaScript
const fact = memory( x => {
if (x === 1) return 1;
else {
return x * fact(x - 1);
}
})
// memorization
function memory(fn) {
let cache = {};
function inner(x) {
if (cache[x]) {
console.log(`fetching from cache ... for ${x}`);
return cache[x];
} else {
console.log(`calculating .... for ${x}`);
let result = fn(x);
console.log(result);
cache[x] = result;
return result;
}
}
return inner;
}
console.dir(fact);
console.log(fact(8));
console.log(fact(5));
console.log(fact(4));
console.log(fact(3));