Discover how a simple function can solve a complex pattern by calling itself!
Why Fibonacci Using Recursion in DSA C++?
Imagine you want to find the 10th number in the Fibonacci sequence by writing down each number one by one on paper.
You start adding the last two numbers repeatedly to get the next one.
Doing this by hand is slow and easy to make mistakes, especially as the numbers get bigger.
It's hard to keep track of all the additions and remember previous numbers without error.
Using recursion, the computer can automatically break down the problem into smaller parts.
It calculates smaller Fibonacci numbers first and then combines them to get the bigger ones, without you having to track each step manually.
int fibonacci(int n) {
if (n <= 1) return n;
int a = 0, b = 1, c;
for (int i = 2; i <= n; i++) {
c = a + b;
a = b;
b = c;
}
return b;
}int fibonacci(int n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}This lets us solve complex problems by breaking them into simpler, repeatable steps that the computer handles automatically.
Calculating Fibonacci numbers is useful in computer graphics, financial models, and nature simulations where patterns repeat in a similar way.
Manual calculation is slow and error-prone.
Recursion breaks the problem into smaller, manageable parts.
It helps automate repetitive calculations efficiently.
Practice
Solution
Step 1: Understand Fibonacci sequence definition
The Fibonacci sequence starts with 0 and 1, and each next number is the sum of the two before it.Step 2: Relate to recursion
Recursion calls the function for the two previous numbers and adds their results to get the current number.Final Answer:
Each number is the sum of the two preceding numbers starting from 0 and 1 -> Option BQuick Check:
Fibonacci = sum of two previous numbers [OK]
- Thinking Fibonacci multiplies previous numbers
- Confusing subtraction or squares with Fibonacci
- Ignoring the base cases 0 and 1
Solution
Step 1: Identify correct Fibonacci base cases
Fibonacci sequence starts with 0 at position 0 and 1 at position 1, so base cases must return these values.Step 2: Match base cases to code
if (n == 0) return 0; if (n == 1) return 1; correctly returns 0 for n=0 and 1 for n=1, matching Fibonacci definition.Final Answer:
if (n == 0) return 0; if (n == 1) return 1; -> Option CQuick Check:
Base cases match Fibonacci start [OK]
- Using wrong base values like 1 for n=0
- Returning n for n <= 2 which is incorrect
- Confusing base cases with general recursive step
int fib(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
return fib(n-1) + fib(n-2);
}
int main() {
std::cout << fib(5);
return 0;
}Solution
Step 1: Calculate fib(5) using recursion
fib(5) = fib(4) + fib(3). Calculate fib(4) = fib(3) + fib(2), fib(3) = fib(2) + fib(1), and so on until base cases.Step 2: Evaluate values step-by-step
fib(0)=0, fib(1)=1, fib(2)=1, fib(3)=2, fib(4)=3, fib(5)=5.Final Answer:
5 -> Option AQuick Check:
fib(5) = 5 [OK]
- Calculating fib(5) as 8 or 13 by mistake
- Confusing index starting point
- Skipping base cases in calculation
int fib(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
return fib(n-2) + fib(n-1);
}Solution
Step 1: Check base cases
Base cases for n==0 return 0 and n==1 return 1 are correct for Fibonacci.Step 2: Check recursive step
fib(n-2) + fib(n-1) equals fib(n-1) + fib(n-2) because addition is commutative. Function computes correct values. No error.Final Answer:
No error, function is correct -> Option AQuick Check:
Addition commutative, no error [OK]
- Thinking recursive call order must be strictly n-1 first
- Assuming reversed order changes the result
- Overlooking commutativity of addition
fib called when computing fib(4) using the recursive function below?int fib(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
return fib(n-1) + fib(n-2);
}Solution
Step 1: Trace calls for fib(4)
fib(4) calls fib(3) and fib(2). fib(3) calls fib(2) and fib(1). fib(2) calls fib(1) and fib(0).Step 2: Count total calls
Calls: fib(4), fib(3), fib(2), fib(1), fib(2), fib(1), fib(0), fib(1), fib(0) = 9 calls total.Final Answer:
9 -> Option DQuick Check:
Count recursive calls carefully = 9 [OK]
- Counting only unique calls
- Ignoring repeated calls for same n
- Underestimating recursion tree size
Ready to prove it?
Pass the test and this pattern moves unknown
