Pular para o conteúdo

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.

exemplo.cclique numa linha pra entender ela

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)
o que a função tem que devolver
chamadasaída esperada
fatorial(5)120
fatorial(0)1
fatorial(1)1
fatorial(10)3628800
a sua função
linha 1
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.

aperte Rodar pra ver a saída aqui
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.