Bird
Raised Fist0
DSA Pythonprogramming~5 mins

Fibonacci Using Recursion in DSA Python - 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 taken by the recursive Fibonacci function grows as the input number increases.

Specifically, how many steps does it take to find the nth Fibonacci number?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.

def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

This code calculates the nth Fibonacci number by calling itself twice for each number greater than 1.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Two recursive calls for each call when n > 1.
  • How many times: The function calls itself repeatedly, creating a tree of calls that grows quickly as n increases.
How Execution Grows With Input

Each call makes two more calls until reaching the base case, so the number of calls grows 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, leading to very fast growth.

Final Time Complexity

Time Complexity: O(2^n)

This means the time needed doubles with each increase in n, making it very slow for large numbers.

Common Mistake

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

[OK] Correct: Each call makes two more calls, so the total calls grow exponentially, not linearly.

Interview Connect

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

Self-Check

"What if we used memoization to store results of previous calls? How would the time complexity change?"

Practice

(1/5)
1. What does the Fibonacci sequence represent when calculated using recursion?
easy
A. Each number is the square of the previous number
B. Each number is the product of the two preceding numbers
C. Each number is the difference of the two preceding numbers
D. Each number is the sum of the two preceding numbers

Solution

  1. Step 1: Understand Fibonacci sequence definition

    The Fibonacci sequence is defined such that each number is the sum of the two numbers before it.
  2. Step 2: Relate to recursion

    Recursion calculates this by calling the function for the two previous numbers and adding their results.
  3. Final Answer:

    Each number is the sum of the two preceding numbers -> Option D
  4. Quick Check:

    Fibonacci = sum of two previous numbers [OK]
Hint: Fibonacci adds two previous numbers, not multiply or subtract [OK]
Common Mistakes:
  • Thinking Fibonacci multiplies previous numbers
  • Confusing difference with sum
  • Assuming Fibonacci squares previous number
2. Which of the following is the correct base case syntax for a recursive Fibonacci function in Python?
easy
A. if n == 0 or n == 1: return n
B. if n < 0: return 0
C. if n == 2: return 1
D. if n == 1: return 0

Solution

  1. Step 1: Identify base cases for Fibonacci

    Fibonacci sequence starts with 0 at position 0 and 1 at position 1, so base cases are n == 0 and n == 1.
  2. Step 2: Check syntax correctness

    The correct syntax returns n when n is 0 or 1, matching the base cases.
  3. Final Answer:

    if n == 0 or n == 1: return n -> Option A
  4. Quick Check:

    Base cases return n for 0 or 1 [OK]
Hint: Base cases return n when n is 0 or 1 [OK]
Common Mistakes:
  • Using wrong base case values
  • Returning 0 for n == 1
  • Missing base case for n == 0
3. What is the output of the following code?
def fib(n):
    if n == 0 or n == 1:
        return n
    else:
        return fib(n-1) + fib(n-2)

print(fib(4))
medium
A. 4
B. 5
C. 3
D. 7

Solution

  1. Step 1: Trace fib(4) calls

    fib(4) = fib(3) + fib(2); fib(3) = fib(2) + fib(1); fib(2) = fib(1) + fib(0)
  2. Step 2: Calculate values bottom-up

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

    3 -> Option C
  4. Quick Check:

    fib(4) = 3 [OK]
Hint: Calculate fib(n-1) + fib(n-2) stepwise [OK]
Common Mistakes:
  • Confusing fib(4) with fib(5)
  • Adding wrong values for fib(2) or fib(3)
  • Forgetting base cases
4. Find the error in this recursive Fibonacci function:
def fib(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fib(n-1) - fib(n-2)
medium
A. The base cases are incorrect
B. The recursive step uses subtraction instead of addition
C. The function lacks a return statement
D. The function will cause infinite recursion

Solution

  1. Step 1: Check base cases

    Base cases for n == 0 and n == 1 are correct and return proper values.
  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 B
  4. Quick Check:

    Recursive step must add previous two values [OK]
Hint: Fibonacci recursion adds, never subtracts previous two [OK]
Common Mistakes:
  • Using subtraction in recursive step
  • Misunderstanding base cases
  • Missing return keyword
5. How many total calls are made when computing fib(5) using the naive recursive Fibonacci function?
def fib(n):
    if n == 0 or n == 1:
        return n
    else:
        return fib(n-1) + fib(n-2)
hard
A. 15
B. 9
C. 7
D. 10

Solution

  1. Step 1: Count calls for fib(5)

    fib(5) calls fib(4) and fib(3); fib(4) calls fib(3) and fib(2); fib(3) calls fib(2) and fib(1), etc.
  2. Step 2: Calculate total calls

    Total calls = 15 (including repeated calls for fib(3), fib(2), fib(1), fib(0)) as the recursion tree expands.
  3. Final Answer:

    15 -> Option A
  4. Quick Check:

    Naive recursion calls grow exponentially; fib(5) = 15 calls [OK]
Hint: Count all calls in recursion tree for fib(n) [OK]
Common Mistakes:
  • Counting only unique calls
  • Ignoring repeated calls in recursion
  • Underestimating exponential growth
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