Recursion in Java Explained

Author: Tatyana Milkina
  1. What Is Recursion in Java
  2. How Recursion Works (Call Stack)
  3. Base Case and Recursive Call
  4. Example: Factorial Using Recursion
  5. Example: Fibonacci Numbers (Recursion)
  6. Recursion vs Iteration
  7. Common Recursion Mistakes
  8. Conclusion

Recursion in Java is a programming technique in which a method calls itself to solve a problem. Recursive solutions are especially useful when a task can be divided into smaller, similar subproblems.

1. What Is Recursion in Java

A recursive method is a method that calls itself directly or indirectly. Each such call is placed on the call stack.

Recursion is commonly used to solve the following types of problems:

  • factorial calculation
  • Fibonacci numbers
  • tree and graph traversal
  • “divide and conquer” algorithms

2. How Recursion Works (Call Stack)

Each time a recursive method is invoked, Java creates a new frame in the call stack. This frame stores:

  • method parameters
  • local variables
  • return address

When a method finishes execution, its frame is removed from the stack, and control returns to the previous call.

3. Base Case and Recursive Call

Every recursive method must have a base case — a condition under which recursion stops.

If the base case is missing or implemented incorrectly, recursive calls will continue indefinitely, resulting in a StackOverflowError.

  • Base case — terminates the recursion
  • Recursive case — the method calls itself with modified arguments

4. Example: Factorial Using Recursion

The factorial of a number n is defined as follows:

n! = n × (n - 1) × (n - 2) × ... × 1

Recursive implementation in Java:

public class RecursionExample {

    static int factorial(int n) {
        if (n == 1) { // base case
            return 1;
        }
        return n * factorial(n - 1); // recursive call
    }

    public static void main(String[] args) {
        int result = factorial(5);
        System.out.println("Factorial of 5 = " + result);
    }
}

Here:

  • n == 1 — base case
  • factorial(n - 1) — recursive call

5. Example: Fibonacci Numbers (Recursion)

The Fibonacci sequence is another classic example of recursion:

public class FibonacciExample {

    static int fibonacci(int n) {
        if (n <= 1) {
            return n;
        }
        return fibonacci(n - 1) + fibonacci(n - 2);
    }

    public static void main(String[] args) {
        System.out.println(fibonacci(6));
    }
}

Important: this example is useful for learning recursion, but it is inefficient for large values of n. In real-world projects, loops or memoization should be used instead.

6. Recursion vs Iteration

Many problems solved using recursion can also be implemented with loops. However, recursion often provides:

  • cleaner and more readable code
  • a natural solution for hierarchical data structures

Disadvantages of recursion:

  • higher memory consumption due to the call stack
  • risk of StackOverflowError
  • lower performance compared to iteration

7. Common Recursion Mistakes

  • missing base case
  • recursive call that does not move toward the base case
  • excessive recursion depth

Always ensure that each recursive call brings the program closer to termination.

8. Conclusion

Recursion in Java is a powerful technique that allows developers to solve complex problems elegantly. Understanding how recursion works, including the call stack and base case, is essential for every Java developer.

Read also:
Comments