Fibonacci Using Recursion in DSA C# - Time & Space Complexity
We want to understand how the time needed to find a Fibonacci number grows as the input number gets bigger.
Specifically, how many steps does the recursive method take as the input increases?
Analyze the time complexity of the following code snippet.
int Fibonacci(int 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 smaller values until it reaches the base cases.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Recursive calls to Fibonacci for n-1 and n-2.
- How many times: Each call generates two more calls until base cases are reached, causing many repeated calculations.
Each number requires calculating two smaller Fibonacci numbers, which themselves require two smaller numbers, and so on.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 177 calls |
| 20 | Over 21,000 calls |
| 30 | More than 2 million calls |
Pattern observation: The number of calls grows very fast, roughly doubling with each increase in n.
Time Complexity: O(2^n)
This means the time needed roughly doubles every time the input number increases by one, making it very slow for large inputs.
[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 calls grow exponentially, not linearly.
Understanding this recursive pattern helps you see why some solutions are slow and how to improve them, a key skill in interviews.
"What if we used memoization to save results of previous calls? How would the time complexity change?"
Practice
Solution
Step 1: Understand Fibonacci sequence definition
The Fibonacci sequence is defined such that each number is the sum of the two numbers before it.Step 2: Apply to recursion context
Recursion calculates this by calling the function for the two previous numbers and adding their results.Final Answer:
Each number is the sum of the two preceding numbers -> Option BQuick Check:
Fibonacci = sum of two previous numbers [OK]
- Thinking Fibonacci multiplies previous numbers
- Confusing subtraction or division with addition
- Assuming Fibonacci uses only one previous number
Solution
Step 1: Identify function return type and parameters
The Fibonacci function returns an integer and takes an integer parameter for the position.Step 2: Match correct C# syntax
Correct syntax includes return type, function name, and parameter with type: int Fibonacci(int n)Final Answer:
int Fibonacci(int n) -> Option CQuick Check:
Function returns int and takes int parameter [OK]
- Using void return type instead of int
- Missing parameter type or name
- Incorrect parameter list syntax
static int Fibonacci(int n) {
if (n <= 1) return n;
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
Console.WriteLine(Fibonacci(4));Solution
Step 1: Calculate Fibonacci(4) using recursion
Fibonacci(4) = Fibonacci(3) + Fibonacci(2). Fibonacci(3) = Fibonacci(2) + Fibonacci(1) = 1 + 1 = 2. Fibonacci(2) = Fibonacci(1) + Fibonacci(0) = 1 + 0 = 1. So Fibonacci(4) = 2 + 1 = 3.Step 2: Confirm output
The printed output is 3.Final Answer:
3 -> Option AQuick Check:
Fibonacci(4) = 3 [OK]
- Confusing Fibonacci(4) with Fibonacci(5)
- Miscounting base cases
- Adding wrong recursive results
int Fibonacci(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
return Fibonacci(n - 1) - Fibonacci(n - 2);
}Solution
Step 1: Check base cases
Base cases for n=0 and n=1 are correct and return 0 and 1 respectively.Step 2: Analyze recursive return statement
The function uses subtraction (Fibonacci(n - 1) - Fibonacci(n - 2)) instead of addition, which is incorrect for Fibonacci sequence.Final Answer:
The recursive call uses subtraction instead of addition -> Option AQuick Check:
Fibonacci sums previous two, not subtracts [OK]
- Using subtraction instead of addition in recursion
- Forgetting to return in base cases
- Missing parameter or return type in function
Solution
Step 1: Understand problem with naive recursion
Naive recursion recalculates Fibonacci values many times, causing inefficiency.Step 2: Apply memoization technique
Memoization stores results of Fibonacci calls in a cache to reuse, avoiding repeated work.Final Answer:
Use memoization to store and reuse computed values -> Option DQuick Check:
Memoization optimizes recursion by caching results [OK]
- Thinking only loops can optimize recursion
- Increasing recursion depth does not improve efficiency
- Using subtraction breaks Fibonacci logic
Ready to prove it?
Pass the test and this pattern moves unknown
