const memoFib = memoize((n: number): number =>
n <= 1 ? n : memoFib(n - 1) + memoFib(n - 2)
)
memoFib(10) // β 55 (cached)memoize wraps a function in a cache so repeated calls with the same argument skip recomputation.
Challenge: Implement memoize<T extends unknown[], R>(fn: (...args: T) => R): (...args: T) => R caching results by serialized arguments.
const expensiveFn = memoize((n: number) => n * 2)
expensiveFn(5) // β 10 (computed)
expensiveFn(5) // β 10 (cached)