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.