Bird
Raised Fist0
DSA Javascriptprogramming~5 mins

Fibonacci Using Recursion in DSA Javascript - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Fibonacci Using Recursion
O(2^n)
Understanding Time Complexity

We want to understand how the time needed to find a Fibonacci number grows as the input number gets bigger.

How does the number of steps change when we use recursion to find Fibonacci numbers?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


function fibonacci(n) {
  if (n <= 1) return n;
  return fibonacci(n - 1) + fibonacci(n - 2);
}
    

This code finds the nth Fibonacci number by calling itself twice for smaller numbers until it reaches the base cases.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Two recursive calls for each number greater than 1.
  • How many times: The function calls itself many times, growing quickly as n increases.
How Execution Grows With Input

Each call makes two more calls until reaching the base cases, so the total calls grow very fast.

Input Size (n)Approx. Operations
10About 177 calls
20About 21,891 calls
30About 2,692,537 calls

Pattern observation: The number of calls roughly doubles with each increase in n, growing exponentially.

Final Time Complexity

Time Complexity: O(2^n)

This means the time needed grows very fast, doubling with each step up in n, making it slow for large numbers.

Common Mistake

[X] Wrong: "The recursive Fibonacci runs in linear time because it just counts down from n to 0."

[OK] Correct: Each call makes two more calls, so the total number of calls grows much faster than n, not just counting down once.

Interview Connect

Understanding this recursive pattern helps you see why some solutions are slow and how to improve them, a key skill in problem solving.

Self-Check

"What if we add a memory to store results (memoization)? How would the time complexity change?"

Practice

(1/5)
1. What does a recursive Fibonacci function do when called with fib(4)?
easy
A. Throws a syntax error because recursion is not allowed
B. Returns 4 immediately without any calculation
C. Runs an infinite loop without returning
D. Calculates the 4th Fibonacci number by calling itself with smaller numbers

Solution

  1. Step 1: Understand recursive calls for fib(4)

    The function calls fib(3) and fib(2) to calculate fib(4).
  2. Step 2: Combine results of smaller calls

    fib(3) and fib(2) are calculated recursively and their sum is returned as fib(4).
  3. Final Answer:

    Calculates the 4th Fibonacci number by calling itself with smaller numbers -> Option D
  4. Quick Check:

    Recursive calls break problem into smaller parts [OK]
Hint: Recursion breaks problem into smaller calls [OK]
Common Mistakes:
  • Thinking recursion returns input directly
  • Assuming recursion causes infinite loop always
  • Confusing recursion with iteration
2. Which of the following is the correct base case syntax for a recursive Fibonacci function in JavaScript?
easy
A. if (n = 0) return 0;
B. if (n <= 1) return n;
C. if n == 1 then return 1
D. if (n > 1) return n;

Solution

  1. Step 1: Identify correct JavaScript syntax for base case

    The base case must check if n is 0 or 1 and return n using proper JavaScript syntax.
  2. Step 2: Validate each option

    if (n <= 1) return n; uses correct syntax: if (n <= 1) return n; Options A and B have syntax errors or wrong operators, D is logically incorrect.
  3. Final Answer:

    if (n <= 1) return n; -> Option B
  4. Quick Check:

    Base case uses if (n <= 1) return n; [OK]
Hint: Base case returns n when n is 0 or 1 [OK]
Common Mistakes:
  • Using assignment (=) instead of comparison (== or ===)
  • Missing parentheses in if condition
  • Incorrect logical condition for base case
3. What is the output of the following code?
function fib(n) {
  if (n <= 1) return n;
  return fib(n - 1) + fib(n - 2);
}
console.log(fib(5));
medium
A. 5
B. 8
C. 3
D. 13

Solution

  1. Step 1: Trace fib(5) recursive calls

    fib(5) = fib(4) + fib(3), fib(4) = fib(3) + fib(2), fib(3) = fib(2) + fib(1), and so on until base cases.
  2. Step 2: Calculate values bottom-up

    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:

    Fibonacci(5) = 5 [OK]
Hint: Remember Fibonacci sequence: 0,1,1,2,3,5... [OK]
Common Mistakes:
  • Confusing index with Fibonacci value
  • Miscounting recursive calls
  • Assuming fib(5) is 8 or 13 incorrectly
4. Identify the error in this recursive Fibonacci function:
function fib(n) {
  if (n == 0) return 0;
  if (n == 1) return 1;
  return fib(n - 1) - fib(n - 2);
}
medium
A. The recursive step uses subtraction instead of addition
B. The base cases are incorrect
C. The function will cause infinite recursion
D. The function syntax is invalid

Solution

  1. Step 1: Check base cases correctness

    Base cases for n==0 and n==1 correctly return 0 and 1 respectively.
  2. Step 2: Analyze recursive step

    The recursive step uses subtraction (fib(n - 1) - fib(n - 2)) instead of addition, which is incorrect for Fibonacci.
  3. Final Answer:

    The recursive step uses subtraction instead of addition -> Option A
  4. Quick Check:

    Fibonacci sums previous two, not subtracts [OK]
Hint: Fibonacci adds previous two numbers, not subtracts [OK]
Common Mistakes:
  • Using wrong operator (+ vs -)
  • Confusing base cases
  • Assuming syntax error when logic is wrong
5. How can you optimize the recursive Fibonacci function to avoid repeated calculations?
hard
A. Remove base cases to speed up recursion
B. Increase the recursion depth limit
C. Use memoization to store and reuse computed values
D. Replace recursion with a while loop only

Solution

  1. Step 1: Understand repeated calculations in recursion

    Recursive Fibonacci recalculates same values many times, causing inefficiency.
  2. Step 2: Apply memoization to store results

    Memoization saves results of fib(n) calls in a cache to reuse and avoid repeated work.
  3. Final Answer:

    Use memoization to store and reuse computed values -> Option C
  4. Quick Check:

    Memoization improves recursion efficiency [OK]
Hint: Store results to avoid repeated recursion calls [OK]
Common Mistakes:
  • Thinking increasing recursion limit helps
  • Believing loops are only solution
  • Removing base cases causing infinite recursion
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