Memoized Functions
const Memoize = (fn) => {
const cache = {};
return (...args) => {
let argsToJson = JSON.stringify(args);
if (argsToJson in cache) {
console.log("Returned from Cache");
return cache[argsToJson];
}
let result = fn.apply(this, args);
cache[argsToJson] = result;
console.log("Returned after Calculating");
return result;
};
};
const addThreeNumbers = (a, b, c) => a + b + c;
const add = Memoize(addThreeNumbers);
console.log(add(1, 2, 3));
console.log(add(4, 5, 6));
console.log(add(1, 2, 3));
// Output:
Returned after Calculating
6
Returned after Calculating
15
Returned from Cache
6
Recursive Memoized Factorial Function
const Factorial = Memoize((num) => {
if (num === 1) return 1;
return num * Factorial(num - 1);
});
console.log(Factorial(5));
console.log(Factorial(6));
console.log(Factorial(4));
// Output:
Returned after Calculating
Returned after Calculating
Returned after Calculating
Returned after Calculating
Returned after Calculating
120
Returned from Cache
Returned after Calculating
720
Returned from Cache
24