Entenda funções que chamam a si mesmas visualizando a pilha de chamadas.
O que é recursão?
Recursão é uma técnica de programação em que uma função chama a si mesma. Qualquer coisa que você pode expressar com um laço também pode ser escrita de forma recursiva, mas a recursão realmente brilha quando um problema tem uma estrutura naturalmente autossemelhante.
Toda recursão precisa de um caso-base (uma condição de parada). Sem um, as chamadas continuam para sempre e você vai bater em um estouro de pilha.
Fatorial
n! = n × (n-1) × ... × 1 pode ser escrito recursivamente assim:
intfactorial(int n) {
if (n <= 1) return1; // base casereturn n * factorial(n - 1); // recursive call
}
Atenção: esta implementação ingênua fica exponencialmente mais lenta à medida que n cresce — até fib(40) pode levar vários segundos. Na prática, use um laço ou memoização.
n =
Coisas para tomar cuidado
Estouro de pilha
Sem um caso-base, a recursão nunca para. A pilha se esgota e seu programa quebra.
Desempenho
Recursão que repete o mesmo trabalho várias vezes é ineficiente. Considere memoização (armazenar em cache os resultados) ou reescrever como um laço.
Onde a recursão brilha
Percurso em árvores, algoritmos de dividir para conquistar (como merge sort) e qualquer problema que se encaixe no padrão de indução matemática.
Quiz rápido
intmystery(int n) {
if (n == 0) return0;
return n + mystery(n - 1);
}
printf("%d\n", mystery(5));
Qual é a saída?
5
15
120
0
Explicação:mystery(5) = 5 + mystery(4) = 5 + 4 + 3 + 2 + 1 + 0 = 15. Esta função calcula a soma de 1 até n — não confunda com fatorial (n!).