We’ve seen functions helping each
other — one calling another like good teammates.
But what if a function decides to help itself?
Welcome to the magical world of recursion — where a function calls
itself to solve a problem, one smaller step at a time.
🌀 1.
What Is Recursion?
In simple words, recursion is when a function calls itself.
Each time it calls itself, it tackles a smaller version of the same problem, until a simple case (called the base case) stops the process.
Let’s start small.
🧩 2. The Simplest Example — Counting Down
#include <stdio.h>
void countdown(int n) {if(n == 0) {printf("Blast off!\n");return; // Base case stops recursion }printf("%d...\n", n);countdown(n - 1); // Recursive call}
int main() {countdown(5); return 0;}
Output:
5...
4...
3...
2...
1...
Blast off!
Explanation:
- The function keeps calling itself with a smaller number.
- When n becomes 0, recursion stops.
The key here is:
👉 Every
recursive function must have a base case, or it’ll fall into an infinite
loop (and eventually crash!).
🔁 3. The
Two Golden Rules of Recursion
- There must be a base case — a condition where the function stops calling itself.
- Each recursive call should move toward that base case.
Without these, recursion becomes a snake eating its own tail 🐍 — forever!
🧮 4.
Example — Factorial Using Recursion
Mathematically:
n! = n × (n−1) × (n−2) × … × 1
or,
n! = n × (n−1)!
Let’s translate that into C:
Let’s translate that into C:#include <stdio.h>
int factorial(int n) {if(n == 0 || n == 1) return 1; // Base case else return n * factorial(n - 1); // Recursive step}
int main() { int num = 5;printf("Factorial of %d = %d\n", num, factorial(num)); return 0;}
Output:
Factorial of 5 = 120
🧠 5.
Example — Fibonacci Series Using Recursion
The Fibonacci sequence is a perfect example
of a recursive pattern:
0, 1, 1, 2, 3, 5, 8, 13...
Formula:
F(n) = F(n-1) + F(n-2)
#include <stdio.h>
int fibonacci(int n) {if(n == 0) return 0; else if(n == 1) return 1; else return fibonacci(n - 1) + fibonacci(n - 2);}
int main() { int i, n = 10;printf("Fibonacci Series: ");for(i = 0; i< n; i++)printf("%d ", fibonacci(i)); return 0;}
Fibonacci Series: 0 1 1 2 3 5 8 13 21 34
⚙️ 6. Recursion
Behind the Scenes — Stack in Action
Every time a function calls itself:
- A new copy of that function is pushed onto the call stack.
- When it finishes, it’s popped out of the stack.
It’s like stacking plates 🍽️ — you always remove the top one first (LIFO = Last In, First Out).
That’s why recursion is memory-sensitive — too many nested calls can overflow the stack.
🔄 7.
Recursion vs Iteration
|
Feature |
Recursion |
Iteration |
|
Uses |
Function calls itself |
Loops (for/while) |
|
Memory |
Uses call stack |
Uses fewer variables |
|
Speed |
Slightly slower |
Usually faster |
|
Best For |
Problems naturally recursive (like trees, factorial) |
Repetitive tasks with fixed loops |
Example:
A loop can calculate factorial faster, but recursion is cleaner and closer
to mathematical thinking.
💡 8.
Recursive Thinking — Divide and Conquer
Recursion shines when you can divide a
big problem into smaller subproblems of the same kind.
Examples include:
- Searching and sorting (like QuickSort, MergeSort)
- File system traversal
- Tree and graph problems
Even modern AI algorithms often borrow recursive logic in their core structure!
🧪 9. Lab
Challenges
Challenge 1:
Write a recursive function sumOfDigits(int n) that returns the sum of digits of
a number.
Example: 123 → 6
Challenge 2:
Write a recursive function to reverse a given number.
Example: 1234 → 4321
Challenge 3:
Write a recursive function to find the GCD (Greatest Common Divisor) of two
numbers using Euclid’s algorithm.
Challenge 4 (Conceptual):
Why do recursive solutions consume more memory than loops?
Can you visualize what happens inside the call stack?
⚠️ 10. Common
Mistakes to Avoid
- ❌ Forgetting the base case — leads to infinite recursion.
- ❌ Making recursive calls without changing the input — you’ll never reach the base case.
- ❌ Using recursion for simple repetitive tasks — loops are better there.
🌱 Final
Thoughts
Recursion may seem mind-bending at first,
but it’s one of the most beautiful ideas in programming.
It teaches you to think mathematically — breaking big problems into
smaller ones until you hit simplicity.
As you grow in C (and later in Python, Java, or AI), you’ll find recursion hiding inside many algorithms that power today’s tech — from sorting your playlist to parsing your web pages.
So next time you call a function that calls itself, smile — it’s just C doing a little magic. ✨
🧭 Series
Wrap-up
You’ve now completed the full 4-part journey of mastering functions in C:
- The Need for Functions — Why they exist
- Parameters and Return Values — How data travels
- Scope and Lifetime — The hidden world of variables
- Recursion — When functions dare to call themselves
Post a Comment