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
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.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: Dividir para conquistar: quebrar, resolver e juntar.
Os objetivos desta aula. 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.
Veja o essencial, parte por parte.
Quebrar o problema em metades. Dividir para conquistar quebra o problema em pedaços menores do mesmo tipo.
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.
Onde a técnica brilha. O problema pode ser partido em subproblemas do mesmo tipo e independentes entre si.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
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.
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
FIMA 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.