Bird
Raised Fist0
DSA Javascriptprogramming~10 mins

Memoization to Optimize Recursion in DSA Javascript - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create a memo object to store results.

DSA Javascript
function fib(n, memo = [1]) {
  if (n <= 1) return n;
  if (memo[n]) return memo[n];
  memo[n] = fib(n - 1, memo) + fib(n - 2, memo);
  return memo[n];
}
Drag options to blanks, or click blank then click option'
A0
B[]
Cnull
D{}
Attempts:
3 left
💡 Hint
Common Mistakes
Using an array [] instead of an object for memo.
Setting memo to null or 0 which causes errors.
2fill in blank
medium

Complete the code to check if the Fibonacci value is already computed in memo.

DSA Javascript
function fib(n, memo = {}) {
  if (n <= 1) return n;
  if ([1]) return memo[n];
  memo[n] = fib(n - 1, memo) + fib(n - 2, memo);
  return memo[n];
}
Drag options to blanks, or click blank then click option'
Amemo[n] !== undefined
Bmemo[n] == null
Cmemo[n] === 0
Dmemo[n] === false
Attempts:
3 left
💡 Hint
Common Mistakes
Checking if memo[n] == null which misses zero values.
Checking if memo[n] === 0 which is a valid Fibonacci value.
3fill in blank
hard

Fix the error in the recursive call to pass memo correctly.

DSA Javascript
function fib(n, memo = {}) {
  if (n <= 1) return n;
  if (memo[n] !== undefined) return memo[n];
  memo[n] = fib([1], memo) + fib(n - 2, memo);
  return memo[n];
}
Drag options to blanks, or click blank then click option'
An
Bn - 1
Cn - 2
Dmemo
Attempts:
3 left
💡 Hint
Common Mistakes
Forgetting to pass memo in the first recursive call causes errors.
Passing wrong values instead of memo.
4fill in blank
hard

Fill both blanks to create a memoized factorial function.

DSA Javascript
function factorial(n, memo = [1]) {
  if (n <= 1) return 1;
  if (memo[n]) return memo[n];
  memo[n] = n * factorial([2], memo);
  return memo[n];
}
Drag options to blanks, or click blank then click option'
A{}
Bn - 1
Cn + 1
D[]
Attempts:
3 left
💡 Hint
Common Mistakes
Using an array [] for memo instead of an object.
Increasing n in recursive call causing infinite recursion.
5fill in blank
hard

Fill all three blanks to create a memoized function that sums numbers from 1 to n.

DSA Javascript
function sumToN(n, memo = [1]) {
  if (n <= 1) return n;
  if (memo[n] !== undefined) return memo[n];
  memo[n] = n + sumToN([2], memo);
  return memo[[3]];
}
Drag options to blanks, or click blank then click option'
A{}
Bn - 1
Cn
Attempts:
3 left
💡 Hint
Common Mistakes
Not passing memo in recursive call.
Returning memo with wrong key.

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