Bird
Raised Fist0
DSA Javascriptprogramming~20 mins

Memoization to Optimize Recursion in DSA Javascript - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Memoization Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Fibonacci with Memoization
What is the output of the following JavaScript code that uses memoization to calculate Fibonacci numbers?
DSA Javascript
function fib(n, memo = {}) {
  if (n <= 1) return n;
  if (memo[n]) return memo[n];
  memo[n] = fib(n - 1, memo) + fib(n - 2, memo);
  return memo[n];
}
console.log(fib(6));
A8
B21
C15
D13
Attempts:
2 left
💡 Hint
Recall that Fibonacci sequence starts with 0, 1, 1, 2, 3, 5, 8, 13...
❓ Predict Output
intermediate
2:00remaining
Memoized Factorial Output
What will be printed after running this memoized factorial function?
DSA Javascript
function factorial(n, memo = {}) {
  if (n <= 1) return 1;
  if (memo[n]) return memo[n];
  memo[n] = n * factorial(n - 1, memo);
  return memo[n];
}
console.log(factorial(5));
A120
B24
C60
D720
Attempts:
2 left
💡 Hint
Factorial of 5 is 5 * 4 * 3 * 2 * 1.
🔧 Debug
advanced
2:00remaining
Identify the Error in Memoized Fibonacci
What error will this code produce when run?
DSA Javascript
function fib(n, memo = {}) {
  if (n <= 1) return n;
  if (memo[n]) return memo[n];
  memo[n] = fib(n - 1) + fib(n - 2, memo);
  return memo[n];
}
console.log(fib(5));
AOutputs 5
BTypeError: Cannot read property '5' of undefined
CStackOverflowError due to infinite recursion
DReferenceError: memo is not defined
Attempts:
2 left
💡 Hint
Check how the memo object is passed in recursive calls.
❓ Predict Output
advanced
2:00remaining
Output of Memoized Climbing Stairs Problem
What is the output of this memoized function that counts ways to climb stairs?
DSA Javascript
function climbStairs(n, memo = {}) {
  if (n <= 2) return n;
  if (memo[n]) return memo[n];
  memo[n] = climbStairs(n - 1, memo) + climbStairs(n - 2, memo);
  return memo[n];
}
console.log(climbStairs(5));
A8
B13
C5
D10
Attempts:
2 left
💡 Hint
Number of ways to climb 5 stairs with 1 or 2 steps at a time.
🧠 Conceptual
expert
2:00remaining
Memoization Impact on Recursive Time Complexity
Which statement best describes how memoization changes the time complexity of a naive recursive Fibonacci function?
AIt does not affect time complexity but reduces space complexity.
BIt increases time complexity because of extra memory usage.
CIt reduces time complexity from exponential to linear by storing intermediate results.
DIt changes time complexity from linear to logarithmic by dividing the problem.
Attempts:
2 left
💡 Hint
Think about how many times each Fibonacci number is calculated with and without memoization.

Practice

(1/5)
1. What is the main purpose of using memoization in recursive functions?
easy
A. To make the function run slower by adding extra steps
B. To store results of expensive function calls and reuse them later
C. To avoid using recursion altogether
D. To increase the number of recursive calls

Solution

  1. Step 1: Understand what memoization does

    Memoization saves the results of function calls so that if the same inputs occur again, the saved result is used instead of recalculating.
  2. Step 2: Identify the effect on recursion

    This reduces repeated work and speeds up recursive functions by avoiding duplicate calculations.
  3. Final Answer:

    To store results of expensive function calls and reuse them later -> Option B
  4. Quick Check:

    Memoization = Store and reuse results [OK]
Hint: Memoization saves repeated work to speed recursion [OK]
Common Mistakes:
  • Thinking memoization makes recursion slower
  • Confusing memoization with iteration
  • Believing memoization removes recursion
2. Which of the following is the correct way to declare a memo object inside a recursive function in JavaScript?
easy
A. const memo = {}; inside the function, then pass it as a parameter
B. var memo = []; inside the function without passing it
C. let memo = 0; inside the function
D. memo = new Map(); outside the function and never pass it

Solution

  1. Step 1: Understand memo object usage

    The memo object should be an object or map to store key-value pairs of inputs and results.
  2. Step 2: Correct placement and passing

    Declaring const memo = {} inside the function and passing it as a parameter ensures the same memo is used across recursive calls.
  3. Final Answer:

    const memo = {}; inside the function, then pass it as a parameter -> Option A
  4. Quick Check:

    Memo object declared and passed = const memo = {}; inside the function, then pass it as a parameter [OK]
Hint: Declare memo as object and pass it to recursive calls [OK]
Common Mistakes:
  • Using array instead of object for memo
  • Not passing memo to recursive calls
  • Declaring memo as a number
3. What will be the output of the following code?
function fib(n, memo = {}) {
  if (n <= 1) return n;
  if (memo[n]) return memo[n];
  memo[n] = fib(n - 1, memo) + fib(n - 2, memo);
  return memo[n];
}
console.log(fib(5));
medium
A. 5
B. 8
C. 3
D. Undefined

Solution

  1. Step 1: Understand Fibonacci calculation with memoization

    fib(5) calculates Fibonacci number at position 5 using memo to avoid repeated calls.
  2. Step 2: Calculate fib(5) step-by-step

    fib(0)=0, fib(1)=1, fib(2)=1, fib(3)=2, fib(4)=3, fib(5)=5.
  3. Final Answer:

    5 -> Option A
  4. Quick Check:

    fib(5) = 5 [OK]
Hint: Remember Fibonacci sequence: 0,1,1,2,3,5... [OK]
Common Mistakes:
  • Confusing fib(5) with fib(6)
  • Ignoring memo and recalculating
  • Assuming output is 8
4. Identify the error in this memoized factorial function and choose the fix:
function factorial(n, memo = {}) {
  if (n === 0) return 1;
  if (memo[n]) return memo[n];
  memo[n] = n * factorial(n - 1);
  return memo[n];
}
medium
A. Remove memo object completely
B. Change base case to n === 1
C. Pass memo in recursive call: factorial(n - 1, memo)
D. Initialize memo as an array instead of object

Solution

  1. Step 1: Check recursive call parameters

    The recursive call to factorial misses passing the memo object, so memo is reset each time.
  2. Step 2: Fix by passing memo in recursion

    Change call to factorial(n - 1, memo) to keep memo consistent across calls.
  3. Final Answer:

    Pass memo in recursive call: factorial(n - 1, memo) -> Option C
  4. Quick Check:

    Pass memo to recursive calls to fix [OK]
Hint: Always pass memo object in recursive calls [OK]
Common Mistakes:
  • Forgetting to pass memo in recursion
  • Changing base case unnecessarily
  • Removing memo defeats optimization
5. You want to optimize a recursive function that calculates the number of ways to climb n stairs taking 1 or 2 steps at a time. Which memoization approach below correctly improves performance?
hard
A. Store results only for even stair numbers in memo
B. Use a global variable to count calls without storing results
C. Rewrite the function to use a loop without memoization
D. Use a memo object passed through recursive calls to store results for each stair number

Solution

  1. Step 1: Understand the problem and recursion

    The function counts ways to climb stairs by summing ways(n-1) and ways(n-2).
  2. Step 2: Apply memoization correctly

    Passing a memo object through recursive calls stores results for each stair number, avoiding repeated calculations.
  3. Step 3: Evaluate other options

    Global counters don't store results, loops change approach, and storing only even results misses odd cases.
  4. Final Answer:

    Use a memo object passed through recursive calls to store results for each stair number -> Option D
  5. Quick Check:

    Memo object for all inputs optimizes recursion [OK]
Hint: Memoize all inputs to avoid repeated stair count calculations [OK]
Common Mistakes:
  • Not passing memo object through recursion
  • Partial memoization missing some inputs
  • Confusing memoization with iteration
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard