Recursão em Java: Entendimento, Exemplos e Trade-offs
Recursão em Java
Este guia explica métodos recursivos em Java, percorre um exemplo clássico de fatorial e avalia os prós e contras do uso de recursão.
Em Java, um método que chama a si mesmo é chamado de método recursivo, e a técnica geral é conhecida como recursão. Uma ilustração simples do mundo real são dois espelhos face a face: cada reflexo é outra imagem de espelho, repetindo até a luz ser absorvida.
Como a Recursão Funciona

Na ilustração acima, o método recursivo() é invocado a partir de main() — uma chamada normal. Dentro de recursivo(), o mesmo método chama a si mesmo novamente, criando uma chamada recursiva. Para prevenir loop infinito, cada chamada recursiva deve incluir uma condição de término, tipicamente implementada com uma instrução if…else.
Exemplo: Fatorial de um Número Usando Recursão
class Fatorial { static int fatorial(int n) { if (n != 0) // condição de término return n * fatorial(n - 1); // chamada recursiva else return 1; } public static void main(String[] args) { int numero = 4, resultado; resultado = fatorial(numero); System.out.println(numero + " fatorial = " + resultado); } }
Saída:
4 fatorial = 24
O método fatorial() é chamado de main() com o argumento numero. Dentro de fatorial(), a linha
return n * fatorial(n-1); faz o método invocar a si mesmo com valor decrementado. Começando com n = 4, as chamadas progridem: 4 → 3 → 2 → 1 → 0. Quando n chega a 0, a condição if falha, retornando 1. O produto acumulado então propaga de volta pela pilha de chamadas até main().
Como o Programa de Fatorial Executa
A imagem abaixo ilustra a evolução da pilha de chamadas durante a execução.

Vantagens e Desvantagens da Recursão
- Prós: Simplifica código para problemas que naturalmente se encaixam em padrões recursivos (ex: travessia de árvores, geração combinatória). Frequentemente resulta em implementações mais curtas e legíveis.
- Contras: Cada chamada recursiva consome espaço na pilha; recursão profunda pode levar a estouro de pilha. Soluções recursivas são tipicamente menos eficientes em memória e podem rodar mais lento que contrapartes iterativas.
No geral, a recursão oferece soluções elegantes ao custo de maior uso de memória e potencial sobrecarga de performance. Para muitos casos de uso, especialmente aqueles com profundidade limitada, o trade-off vale a pena.
Leitura Recomendada: Quais são as vantagens e desvantagens da recursão?
Java
- Dominando Operadores Java: Tipos, Sintaxe e Exemplos Práticos
- Dominando Interfaces em Java: Conceitos, Implementação e Boas Práticas
- Dominando Try-With-Resources em Java: Gerenciamento Automático de Recursos Explicado
- Anotações em Java Explicadas: Tipos, Posicionamento e Exemplos Práticos
- Tipos de Anotação em Java: Guia Completo de Predefinidas, Customizadas e Meta-Anotações
- Método Java String length(): Como Obter o Tamanho de uma String (Exemplo)
- Entendendo Java String.charAt(): Sintaxe, Tipo de Retorno, Exceções e Exemplo Prático
- Dominando Java String.endsWith(): Como Verificar Sufixos de String com Exemplos
- Dominando Substituição de Strings em Java: replace(), replaceAll() e replaceFirst() Explicados
- Inverter String em Java Usando Recursão – Guia Passo a Passo