Avatar ·

Como implementar recursão em Java?

Como implementar recursão corretamente em Java? Problema com StackOverflowError

Olá a todos! Estou tentando entender recursão em Java, mas constantemente encontro o erro StackOverflowError. Por favor, me digam como organizar corretamente uma chamada recursiva de método para evitar isso?

Escrevi uma função simples para calcular o fatorial de um número, mas com o valor 10000 o programa trava. Aqui está meu código:

public class RecursionTest {
    public static int factorial(int n) {
        if (n == 0) {
            return 1;
        }
        return n * factorial(n - 1);
    }

    public static void main(String[] args) {
        System.out.println(factorial(10000)); // StackOverflowError
    }
}

Já tentei:

  1. Aumentar o tamanho da stack através dos parâmetros da JVM (-Xss2m), mas isso apenas adia o problema, não o resolve.
  2. Substituir int por long e BigInteger — o resultado é o mesmo, o erro em