Introduction to Recursion: A Powerful Tool in Programming

Amit KesarwaniAmit Kesarwani
3 min read

Recursion is a fundamental concept in computer science and programming where a function calls itself to solve a problem. It is both elegant and powerful, often leading to shorter, cleaner code. In this article, we will break down the idea of recursion, understand when and why to use it, and compare it with loops. We’ll also explore how recursion works internally and where it's applied in real-world scenarios.


What is Recursion?

Recursion is when a function solves a problem by calling itself on a smaller part of the same problem.

Structure of Recursive Function:

  1. Base Case: The condition to stop recursion.

  2. Recursive Case: Function calls itself with a modified input.


Why and When to Use Recursion?

→ Why Use Recursion?

  • Simplifies code for problems involving repetitive subproblems.

  • Elegant for problems that can be divided into similar subproblems.

  • Fits naturally with problems like tree traversals, combinatorics, and divide-and-conquer algorithms.

→ When to Use Recursion:

  • Problems that have subproblem structure.

  • When the number of iterations is not known in advance.

  • When traversing structures like trees, graphs, and linked lists.


Factorial Example: Loop vs Recursion

Using Loop

int factorial(int n) {
    int result = 1;
    for (int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
}

Output for n = 5:

5! = 5 × 4 × 3 × 2 × 1 = 120

Using Recursion

int factorial(int n) {
    if (n <= 1) return 1;   // Base Case
    return n * factorial(n - 1);  // Recursive Case
}

Dry Run (n = 4):

factorial(4)
= 4 * factorial(3)
= 4 * 3 * factorial(2)
= 4 * 3 * 2 * factorial(1)
= 4 * 3 * 2 * 1 = 24

How Recursion Works Internally

Every time a function calls itself:

  • A new stack frame is pushed onto the call stack.

  • The current function call is paused until the recursive call completes.

  • Once the base case is hit, the stack starts to unwind.

Call Stack Example:

factorial(3)
  └─ factorial(2)
       └─ factorial(1)
           └─ returns 1
       └─ returns 2 * 1 = 2
  └─ returns 3 * 2 = 6

Applications of Recursion

🔹 Mathematics: Factorials, Fibonacci, GCD, power functions
🔹 Data Structures: Trees (DFS), Graphs (DFS/BFS), Linked Lists
🔹 Divide & Conquer: Merge Sort, Quick Sort, Binary Search
🔹 Backtracking: N-Queens Problem, Sudoku Solver
🔹 Dynamic Programming: Top-down memoization techniques
🔹 Problem Solving: permutations, combinations


Recursion vs Loop

FeatureLoopRecursion
SyntaxIterativeFunction calls itself
PerformanceFastSlower due to stack
ReadabilitySimple for linearBetter for tree/graph
Memory usageConstant (stack)Grows with recursion

Conclusion

Recursion is a powerful concept that mirrors the way we naturally solve problems by breaking them down. While it may seem tricky at first, mastering recursion opens the door to solving complex problems elegantly.

So next time you encounter a problem with repeated sub-patterns, ask yourself: "Can this be solved recursively?"

1
Subscribe to my newsletter

Read articles from Amit Kesarwani directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Amit Kesarwani
Amit Kesarwani