Memoization
Cache function results for speed
function memoize(fn) {
const cache = new Map();
return function (...args) {
const key = JSON.stringify(args);
if (cache.has(key)) return cache.get(key);
const result = fn.apply(this, args);
cache.set(key, result);
return result;
};
}
// Slow Fibonacci (exponential)
function slowFib(n) {
if (n < 2) return n;
return slowFib(n - 1) + slowFib(n - 2);
}
// Memoized Fibonacci (linear)
const fastFib = memoize(function fib(n) {
if (n < 2) return n;
return fastFib(n - 1) + fastFib(n - 2);
});
console.time("slow fib(30)");
slowFib(30);
console.timeEnd("slow fib(30)");
console.time("fast fib(30)");
fastFib(30);
console.timeEnd("fast fib(30)");
console.time("fast fib(100)");
console.log(fastFib(100).toString());
console.timeEnd("fast fib(100)");