Bird
Raised Fist0
DSA Javascriptprogramming~5 mins

Memoization to Optimize Recursion in DSA Javascript - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is memoization in the context of recursion?
Memoization is a technique where we save the results of expensive function calls and return the cached result when the same inputs occur again, avoiding repeated calculations.
Click to reveal answer
beginner
How does memoization improve recursive function performance?
Memoization reduces the number of recursive calls by storing results of subproblems, so the function does not recompute the same values multiple times, making it faster.
Click to reveal answer
beginner
In JavaScript, what data structure is commonly used to implement memoization?
A JavaScript object or Map is commonly used to store previously computed results with input values as keys for quick lookup.
Click to reveal answer
intermediate
What problem does memoization solve in recursive Fibonacci calculation?
It prevents the exponential growth of calls by caching Fibonacci numbers already calculated, turning an exponential time problem into a linear time problem.
Click to reveal answer
beginner
True or False: Memoization changes the logic of the recursive function.
False. Memoization does not change the logic; it only stores results to avoid repeated work, keeping the original recursive logic intact.
Click to reveal answer
What is the main benefit of using memoization in recursion?
AUse more memory without speed gain
BMake the code shorter
CAvoid repeated calculations by caching results
DEliminate the need for base cases
Which data structure is best suited for memoization in JavaScript?
AArray
BString
CSet
DObject or Map
Memoization is especially useful for which type of recursive problems?
AProblems with overlapping subproblems
BProblems with no recursion
CProblems with only one recursive call
DProblems that do not return values
What happens if you do not use memoization in Fibonacci recursion?
AThe function runs in exponential time
BThe function does not return correct results
CThe function runs in linear time
DThe function uses no memory
Which of these is NOT a characteristic of memoization?
ACaching results
BChanging the recursive logic
CImproving performance
DUsing extra memory
Explain how memoization optimizes a recursive function like Fibonacci.
Think about how saving answers helps avoid doing the same work again.
You got /4 concepts.
    Describe the steps to add memoization to a simple recursive function in JavaScript.
    Focus on how to remember and reuse previous answers.
    You got /4 concepts.

      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