Padrão 5: recursão que imprime
objetivo Onde você põe o printf decide a ordem da saída.
Aqui a função é e não devolve nada. O que importa é QUANDO o printf acontece: antes ou depois da chamada recursiva.
printf ANTES da chamada: imprime na ida, do maior pro menor. printf DEPOIS: ele fica esperando na e só acontece na volta, do menor pro maior.
Com printf nos DOIS lados, a saída desce e sobe: é o famoso ida e volta.
O caso base aqui é só return; sozinho, sem valor nenhum.
Onde todo mundo escorrega
- Em função void, return com valor não compila. É return; sozinho.
- Se a saída saiu invertida, quase sempre é só trocar a ordem entre o printf e a chamada.
Desafio
Escreva idaVolta, que imprime de n até 1 e depois de 1 até n, tudo separado por espaço. Exemplo: idaVolta(3) imprime 3 2 1 1 2 3. Use uma função só, sem laço.
void idaVolta(int n)| chamada | saída esperada |
|---|---|
| idaVolta(3) | 3 2 1 1 2 3 |
| idaVolta(1) | 1 1 |
| idaVolta(4) | 4 3 2 1 1 2 3 4 |
void idaVolta(int n) {
// caso base: n == 0, so return
// imprima, chame, imprima de novo
}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.