Quick Answer

Handle excessive stack usage in recursion.

Understanding the Issue

This error occurs when the call stack exceeds its limit, typically from infinite recursion or extremely deep recursion without proper base cases.

The Problem

This code demonstrates the issue:

Java Error
public class Factorial {
    public static int factorial(int n) {
        return n * factorial(n-1); // Missing base case
    }
}

The Solution

Here's the corrected code:

Java Fixed
// Solution 1: Add base case
public static int factorial(int n) {
    if (n <= 1) return 1; // Base case
    return n * factorial(n-1);
}

// Solution 2: Convert to iterative
public static int factorial(int n) {
    int result = 1;
    for (int i = 2; i <= n; i++) {
        result *= i;
    }
    return result;
}

// Solution 3: Tail recursion optimization (Java doesn't optimize, but better style)
public static int factorial(int n, int accumulator) {
    if (n <= 1) return accumulator;
    return factorial(n-1, n * accumulator);
}

Key Takeaways

Ensure recursive methods have proper base cases and consider iteration for deep recursion.