Pular para o conteúdo

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.

exemplo.cclique numa linha pra entender ela

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)
o que a função tem que devolver
chamadasaída esperada
idaVolta(3)3 2 1 1 2 3
idaVolta(1)1 1
idaVolta(4)4 3 2 1 1 2 3 4
a sua função
linha 1
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.

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.