Módulo 9 - Dividir para conquistar e a recursão

A ideia da recursão: a função que chama a si mesma

9 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 08/07/2026

O que você vai aprender

  • Entender a recursão: resolver um problema com uma versão menor dele mesmo.
  • Reconhecer a recursão em imagens do dia a dia (bonecas russas, espelhos).
  • Ler uma função recursiva simples acompanhando as chamadas.
  • Diferenciar a abordagem recursiva da repetição com laço.

Bonecas dentro de bonecas

A recursão é uma daquelas ideias que parecem impossíveis até o momento em que fazem todo o sentido. Ela nasce de uma pergunta: e se o pedaço menor de um problema for uma versão menor do MESMO problema? Pense nas bonecas russas, as matrioscas: você abre uma boneca e encontra dentro uma boneca igual, só que menor; abre essa e encontra outra menor ainda, até chegar na bonequinha maciça que não abre mais. Contar quantas bonecas há no conjunto é um problema que contém uma versão menor de si mesmo: é uma boneca mais o número de bonecas lá dentro. A recursão é escrever exatamente isso: para resolver o problema, a função resolve uma versão menor dele, chamando a si mesma.

Isso soa como um cachorro correndo atrás do próprio rabo, e a desconfiança é saudável. A chave que impede a loucura é que cada chamada trabalha com um caso MENOR que o anterior. A função não chama a si mesma para o mesmo problema, e sim para um pedaço encolhido dele. Contar as bonecas de um conjunto de cinco vira contar as de um conjunto de quatro (as que estão dentro), mais um. Contar as de quatro vira contar as de três, mais um. E assim por diante, encolhendo, até chegar na última boneca, aquela que não tem nenhuma dentro, cuja contagem é simplesmente um. Esse encolher rumo a um fim é o que faz a recursão terminar em vez de girar para sempre.

Cinco bonecas russas em tamanhos decrescentes, uma dentro da outra, desenhadas em corte. Uma seta curva de cada boneca aponta para a próxima menor, com o rótulo contar(5) chama contar(4), que chama contar(3), e assim por diante, até contar(1), a menor, que responde direto 1.
Cada chamada resolve um caso menor: contar cinco vira contar quatro mais um, até a menor boneca, cuja resposta é direta.

Lendo uma função recursiva

Vamos ver a recursão em pseudocódigo com um exemplo simples: uma contagem regressiva que anuncia de um número até um e depois grita já. A função recebe um número. Se o número chegou a zero, ela anuncia já e para. Senão, ela escreve o número atual e chama a si mesma com o número menos um, ou seja, para o caso menor. Repare que a função não tem um laço; a repetição acontece pelas chamadas a si mesma, cada uma com um número um pouco menor, até bater no zero. Ler recursão é seguir as chamadas mentalmente: contagem de 3 escreve 3 e chama contagem de 2, que escreve 2 e chama contagem de 1, que escreve 1 e chama contagem de 0, que grita já e encerra.

função contagem(n)
  se n = 0 então
    escreva("Já!")
  senão
    escreva(n)
    contagem(n - 1)   // chama a si mesma para o caso menor
  fim
fim

contagem(3)   // escreve 3, 2, 1 e depois Já!

Sem laço: a repetição vem das chamadas a si mesma, cada uma com n menor, até n chegar a zero.

🎮 Jogo da aula

Siga as chamadas

Acompanhe a função recursiva chamando a si mesma e escolha o que aparece na tela, na ordem.

função eco(n)
  se n = 0 então
    retorne
  fim
  escreva("oi")
  eco(n - 1)
fim
eco(3)

Recursão ou laço: dois caminhos para repetir

Você deve ter notado que a contagem regressiva também daria para fazer com um laço comum, e está certo: muita coisa que se resolve com recursão também se resolve com repetição, e vice-versa. Não são rivais, são dois estilos de pensar a mesma ideia de repetir. O laço repete explicitamente, controlando um contador ou uma condição. A recursão repete implicitamente, quebrando o problema em versões menores de si mesmo. Para alguns problemas, o laço é mais natural e direto (somar uma lista, contar itens). Para outros, especialmente os que têm uma estrutura que se aninha, como percorrer pastas dentro de pastas ou explorar caminhos que se ramificam, a recursão expressa a solução com uma elegância que o laço não alcança. Ter as duas ferramentas na cabeça e saber quando cada uma brilha é parte de amadurecer como programador.

Teste rápido

O que impede uma função recursiva de chamar a si mesma para sempre, num círculo sem fim?

Perguntas frequentes

O que é recursão, sem jargão?
É uma função que resolve um problema chamando a si mesma para uma versão menor do mesmo problema, até chegar num caso tão simples que a resposta é imediata. Como bonecas russas: cada uma contém uma menor, até a menorzinha. É uma forma especial de dividir para conquistar.
Uma função chamar a si mesma não é um erro?
Não, é intencional e válido. O que evita o círculo sem fim é que cada chamada trabalha com um caso menor, encolhendo em direção a um fim. Chamar a si mesma para o mesmo problema, sem encolher, aí sim seria erro (recursão infinita). O segredo está no problema ficar menor a cada chamada.
Recursão é melhor que laço?
Nenhum é melhor em geral; são estilos diferentes de repetir. O laço é mais direto para muitos problemas comuns. A recursão brilha em problemas com estrutura aninhada ou que se ramifica, como percorrer pastas dentro de pastas. Saber usar os dois e escolher o mais claro para cada caso é o ideal.
Por que a recursão parece tão confusa no começo?
Porque a gente está acostumado a resolver as coisas passo a passo, e a recursão pede confiar que a versão menor do problema já está resolvida. É um salto de fé que fica natural com prática. Seguir as chamadas no papel, uma a uma, como no jogo desta aula, é o melhor jeito de destravar.
Onde a recursão é usada de verdade?
Em muitos lugares com estrutura aninhada: percorrer pastas e subpastas, navegar por menus com submenus, explorar árvores de decisão, processar dados que contêm dados iguais dentro. Vários algoritmos de ordenação e busca eficientes também são recursivos. É uma ferramenta poderosa para estruturas que se repetem dentro de si.
Todo problema recursivo pode virar um laço?
Em teoria, sim: tudo que a recursão faz dá para fazer com laço e uma estrutura auxiliar, e vice-versa. Na prática, alguns problemas ficam muito mais simples e legíveis com recursão, e forçá-los em laço complica. A escolha é de clareza: use a forma que expressa melhor a solução daquele problema.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.