Exercise 10: Trampoline (recursion optimization)

Problem Statement

Create a function `trampoline(fn)` that optimizes recursive function (prevent stack overflow).

Sample Output:

const factorial = trampoline((n, acc = 1) => n <= 1 ? acc : () => factorial(n - 1, n * acc));
factorial(10000) => (large number, no stack overflow)

Solution

const trampoline = (fn) => {
  return (...args) => {
    let result = fn(...args);
    while (typeof result === "function") result = result();
    return result;
  };
};

Explanation

Overall Goal:

  • Recursive functions ko optimize karna (tail recursion).

Real world:

  • Deep recursion: stack overflow prevention.
  • Performance: iterative optimization.