Módulo 8 - Recursão avançada: dividir, voltar e escolher

Dividir para conquistar: quebrar, resolver e juntar

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

Velocidade

O que você vai aprender

  • Entender dividir para conquistar como quebrar, resolver e juntar.
  • Identificar as três fases: dividir, resolver os pedaços e combinar.
  • Reconhecer a técnica na busca binária e no merge sort.
  • Perceber que a fase de juntar costuma ser a parte que dá o trabalho.

Quebrar o problema em metades

No curso intermediário a recursão apareceu como uma função que chama a si mesma até bater num caso base. Isso é a mecânica. Dividir para conquistar é uma forma poderosa de usar essa mecânica: em vez de encolher o problema de um em um, você o corta ao meio. Procurar um nome numa lista telefônica ordenada é o exemplo perfeito. Você não lê nome por nome do começo. Abre no meio, vê se o nome procurado vem antes ou depois, e joga fora metade da lista de uma vez. Sobra a metade que interessa, e você repete o corte. Cada passo descarta cinquenta por cento do que restava, então até uma lista de um milhão de nomes é vencida em cerca de vinte olhadas.

A técnica tem sempre três fases. Primeiro dividir: partir o problema em subproblemas menores, quase sempre em duas metades. Depois resolver cada metade, o que costuma ser a própria função se chamando de novo, até os pedaços ficarem tão pequenos que a resposta é óbvia (uma lista de um item já está ordenada, uma busca em zero elementos não achou nada). Por fim combinar: reunir as respostas parciais na resposta do problema inteiro. Na busca binária a combinação é trivial, porque você segue só uma das metades. Em outros algoritmos, como você verá, juntar é justamente onde o algoritmo ganha ou perde a eficiência.

Um retângulo grande rotulado problema no topo se divide em dois retângulos iguais na linha de baixo, e cada um se divide em dois menores, formando três níveis de quebra ao meio. Setas para baixo têm o rótulo dividir; na base, cada pedaço minúsculo tem o rótulo caso base. Setas de baixo para cima do lado direito têm o rótulo combinar, mostrando que as respostas sobem e se juntam.
Dividir para conquistar: o problema desce quebrando ao meio até o caso base, e as respostas sobem se combinando.

A parte esquecida é juntar

É fácil se encantar com a divisão e esquecer a combinação, mas ela é o coração da técnica. Pense em ordenar uma lista de cartas embaralhadas com o merge sort. Dividir é simples: corte a pilha ao meio, e ao meio de novo, até sobrarem pilhas de uma carta só, que já estão em ordem por definição. Aí começa o trabalho de verdade: pegar duas pilhinhas já ordenadas e intercalar carta a carta, comparando os topos, para formar uma pilha maior ordenada. Repita subindo até reconstruir a lista inteira em ordem. A divisão não custa quase nada; é a intercalação, feita em todos os níveis, que ordena de fato. Por isso a fase de combinar merece atenção: ela costuma esconder a lógica que faz o algoritmo funcionar.

// busca binária: dividir para conquistar em ação
FUNÇÃO busca(lista, alvo, ini, fim)
  SE ini > fim ENTÃO
    RETORNE -1        // caso base: intervalo vazio, não achou
  FIM
  meio <- (ini + fim) / 2
  SE lista[meio] = alvo ENTÃO
    RETORNE meio      // achou
  SENÃO SE alvo < lista[meio] ENTÃO
    RETORNE busca(lista, alvo, ini, meio - 1)   // metade da esquerda
  SENÃO
    RETORNE busca(lista, alvo, meio + 1, fim)   // metade da direita
  FIM
FIM

A cada chamada, a busca descarta metade do intervalo. Aqui a combinação é seguir só uma metade, então é imediata.

🎮 Jogo da aula

As fases do dividir para conquistar

Coloque em ordem os passos de resolver um problema com dividir para conquistar, do primeiro ao último. Os cartões aparecem embaralhados.

    Onde a técnica brilha

    Dividir para conquistar não serve para tudo. Ela compensa quando o problema pode ser partido em pedaços independentes do mesmo tipo e quando juntar as respostas é mais barato do que resolver tudo de uma vez. Ordenar, buscar em dados ordenados, multiplicar números gigantes e várias tarefas de geometria seguem esse molde. Já somar todos os itens de uma lista não ganha nada em dividir: um laço simples resolve com o mesmo esforço. A pergunta a fazer é honesta: quebrar ao meio e recombinar realmente reduz o trabalho, ou só adiciona a papelada das metades sem benefício? Quando a resposta é que reduz, a técnica transforma problemas lentos em rápidos.

    Teste rápido

    No merge sort, qual é a fase que realmente ordena os dados?

    Perguntas frequentes

    Qual a diferença entre recursão comum e dividir para conquistar?
    Toda solução de dividir para conquistar usa recursão, mas nem toda recursão divide para conquistar. A recursão comum costuma encolher o problema de um em um (fatorial de n chama fatorial de n menos um). Dividir para conquistar corta o problema ao meio a cada passo e depois combina as respostas das metades. É o corte pela metade e a recombinação que caracterizam a técnica.
    Por que a busca binária é tão mais rápida que olhar item por item?
    Porque cada passo descarta metade do que restava. Olhar item por item, no pior caso, examina todos os elementos. A busca binária, ao cortar pela metade, precisa de cerca de vinte passos para um milhão de itens e trinta para um bilhão. O ganho vem de jogar fora metade da busca a cada comparação, o que só é possível porque os dados estão ordenados.
    Preciso sempre dividir em duas metades?
    Duas metades é o caso mais comum e mais simples, mas não é obrigatório. Alguns algoritmos dividem em três ou mais partes. O essencial é quebrar o problema em subproblemas menores do mesmo tipo. Duas partes é o padrão porque equilibra bem a quebra e a recombinação, e é o suficiente para busca binária e merge sort.
    Dá para fazer dividir para conquistar sem recursão?
    Dá, usando uma pilha ou uma fila para guardar os pedaços que faltam resolver, no lugar da recursão. Muitas bibliotecas fazem isso para evitar chamadas profundas demais. Mas a versão recursiva costuma ser bem mais curta e clara, porque a própria estrutura de chamadas já organiza a divisão e a recombinação. Recursão é a forma natural de escrever a técnica.
    Todo problema fica mais rápido se eu dividir para conquistar?
    Não. A técnica só ajuda quando quebrar e recombinar custa menos que resolver o problema inteiro de frente. Somar uma lista, por exemplo, não melhora com divisão: um laço simples já é ótimo. Dividir tem um custo próprio, o de partir e depois juntar. Vale a pena quando esse custo é pequeno perto da economia que a quebra traz.
    O que é o caso base em dividir para conquistar?
    É o pedaço tão pequeno que a resposta é imediata, sem precisar dividir mais. Numa busca binária, o caso base é o intervalo vazio (não achou) ou o elemento certo no meio (achou). No merge sort, é a lista de zero ou um item, que já está ordenada. Sem um caso base, a divisão continuaria para sempre e a recursão nunca terminaria.

    Fontes

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