Caso base e caso recursivo
objetivo As duas partes que toda função recursiva tem. Sem a primeira, nada funciona.
é uma função que resolve um problema chamando ela mesma com uma versão MENOR do mesmo problema.
O é onde ela para e devolve uma resposta direta, sem chamar ninguém. É a primeira coisa que você escreve.
O é a chamada com o problema menor. Ele precisa caminhar na direção do caso base, senão a função nunca termina.
O pulo do gato é confiar: suponha que a função JÁ funciona pra n - 1 e use isso pra montar o n. Não tente acompanhar todas as chamadas de cabeça.
Onde todo mundo escorrega
- Sem caso base a pilha enche e o programa morre com SIGSEGV.
- Chamar com o mesmo valor, tipo somaAte(n), nunca chega no fim.
- Esquecer o return no caso recursivo faz a função devolver lixo.
Desafio
Escreva a função fatorial de forma recursiva. Lembre que o fatorial de 0 é 1.
int fatorial(int n)| chamada | saída esperada |
|---|---|
| fatorial(5) | 120 |
| fatorial(0) | 1 |
| fatorial(1) | 1 |
| fatorial(10) | 3628800 |
int fatorial(int n) {
// 1. caso base: quando n for 0, devolva 1
// 2. caso recursivo: n vezes o fatorial de n - 1
}Ctrl+Enter (Cmd+Enter no Mac) roda. Esc sai do editor.
Ver a pilha de chamadas passo a passo
Mostra o que o seu código faz em cada chamada. É uma simulação didática, não substitui o botão de testar.
Dicas
Tenta sozinho primeiro. Travou de verdade, abre a primeira.