function fib(n) {
if (n <= 1) return n;
return fib(n - 1) + fib(n - 2);
}
console.log(fib(5));The Fibonacci sequence starts as 0, 1, 1, 2, 3, 5, 8, ...
fib(5) = fib(4) + fib(3) = 3 + 2 = 5
Plain recursion recalculates the same subproblems multiple times, causing exponential growth in calls and slow performance.
function fibMemo(n, memo = {}) {
if (n <= 1) return n;
if (memo[n]) return memo[n];
memo[n] = fibMemo(n - 1, memo) + fibMemo(n - 2, memo);
return memo[n];
}
console.log(fibMemo(10));fibMemo(10) returns the 10th Fibonacci number which is 55.
Memoization avoids repeated calculations, making it efficient.
function factorial(n) {
if (n === 0) return 1;
return n * factorial(n - 1);
}
console.log(factorial(5));The function calls factorial(n) instead of factorial(n-1), causing infinite recursion and stack overflow.
Option A correctly initializes dp with base cases and iteratively builds up to n.
Option A is plain recursion without memoization.
Option A incorrectly multiplies instead of adding.
Option A has off-by-one errors in indexing.
