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

Dividir para conquistar: quebrar o problema grande

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

O que você vai aprender

  • Entender a decomposição: quebrar um problema grande em partes menores.
  • Transformar cada subproblema numa função com um trabalho claro.
  • Perceber que funções pequenas se combinam para resolver o todo.
  • Reconhecer quando um problema pede para ser dividido.

O grande assusta, o pequeno se resolve

Diante de um problema grande, iniciante congela e experiente sorri, porque conhece o truque mais antigo da resolução de problemas: não resolva o grande, quebre-o em pequenos. Organizar uma festa parece impossível como um bloco só, mas vira uma lista tranquila quando você separa em partes: mandar convites, comprar comida, escolher música, arrumar o local. Cada parte é simples; a festa inteira é só a soma delas. Programar funciona exatamente assim. Um programa de folha de pagamento parece um monstro, até você perceber que ele é feito de pedaços menores: calcular o salário bruto, descontar o imposto, somar os benefícios, gerar o holerite. Cada pedaço é uma função do tamanho da sua cabeça.

A decomposição é onde as funções que você estudou no módulo anterior mostram todo o valor. Cada subproblema vira uma função com um nome que diz o que ela faz e um trabalho bem delimitado: calcularImposto, montarMensagem, validarEmail. O programa principal deixa de ser um paredão de instruções e vira uma sequência legível de chamadas, quase um resumo em português do que acontece. Quem lê entende o todo sem se afogar nos detalhes, e quem conserta um bug sabe exatamente em qual função mexer. Escrever um programa grande sem decompor é como escrever um livro sem capítulos: até dá, mas ninguém acha nada, nem você.

Uma árvore de decomposição. No topo, uma caixa grande escrita gerar holerite. Dela descem três caixas médias: calcular salário bruto, descontar impostos e somar benefícios. De uma delas descem duas caixas menores. As folhas da árvore são tarefas simples e diretas.
O problema grande no topo se divide em subproblemas, até cada folha ser uma tarefa simples do tamanho de uma função.

De cima para baixo: pensar antes de escrever

Uma forma prática de decompor é pensar de cima para baixo. Comece pelo problema inteiro e pergunte: quais são as três ou quatro grandes partes disto? Escreva o programa principal como se essas partes já existissem, chamando funções que você ainda nem criou: primeiro calcule o salário bruto, depois desconte os impostos, depois some os benefícios. Nesse momento você está projetando, não codando os detalhes. Só depois você desce e resolve cada função, e, se alguma ainda for grande, aplica a mesma quebra dentro dela. Essa abordagem tem uma vantagem enorme: você organiza o raciocínio antes de se perder nas minúcias, exatamente o passo planejar do método dos quatro passos que abriu o curso.

// o programa principal lê como um resumo do que acontece:
função gerarHolerite(funcionario)
  bruto <- calcularSalarioBruto(funcionario)
  impostos <- calcularImpostos(bruto)
  beneficios <- somarBeneficios(funcionario)
  liquido <- bruto - impostos + beneficios
  retorne montarHolerite(funcionario, bruto, impostos, liquido)
fim
// cada função chamada é um subproblema resolvido à parte

O programa principal vira um resumo legível: cada linha delega um subproblema a uma função com nome claro.

🎮 Jogo da aula

Decomponha a tarefa

Quebrar em partes um programa que calcula a média final de um aluno. Ordene os subproblemas numa sequência que faça sentido.

    O tamanho certo de cada função

    Uma dúvida natural: até onde dividir? A regra prática que os programadores seguem é que cada função deve fazer UMA coisa, e fazê-la bem. Se você não consegue descrever o que uma função faz sem usar a palavra e (ela calcula o imposto E monta o relatório E envia o e-mail), ela provavelmente deveria ser mais de uma função. Por outro lado, não é preciso exagerar e criar uma função para cada linha; o objetivo é legibilidade, não fragmentação. O bom tamanho é aquele em que a função cabe na sua cabeça de uma vez e tem um nome honesto. Essa disciplina, que você vai aprofundar no módulo de código limpo, começa aqui, na hora de decidir como quebrar o problema.

    Teste rápido

    Por que decompor um problema grande em funções menores facilita a programação?

    Perguntas frequentes

    O que é decompor um problema?
    É quebrá-lo em subproblemas menores e mais fáceis, resolver cada um e combinar as soluções. Em programação, cada subproblema costuma virar uma função. É a estratégia dividir para conquistar, que transforma uma tarefa grande e assustadora numa sequência de tarefas pequenas e gerenciáveis.
    Como sei em quantas partes dividir?
    Uma boa regra é que cada função faça uma coisa só. Se você precisa da palavra e para descrever o que ela faz, provavelmente são duas funções. O objetivo é que cada parte caiba na sua cabeça e tenha um nome honesto. Não é preciso fragmentar cada linha; o alvo é clareza, não pedaços minúsculos.
    O que é pensar de cima para baixo?
    É começar pelo problema inteiro e escrevê-lo como uma sequência de partes grandes, chamando funções que você ainda vai criar. Primeiro você projeta o esqueleto (calcule isto, depois aquilo) e só depois desce e resolve cada função. Assim você organiza o raciocínio antes de se perder nos detalhes.
    Decompor não dá mais trabalho do que escrever tudo direto?
    No começo parece, mas economiza muito depois. Código decomposto é mais fácil de entender, testar e consertar, e as funções pequenas costumam ser reaproveitadas. Escrever tudo num bloco só é rápido para escrever e péssimo para manter. A decomposição é um investimento que se paga na primeira vez que você precisa mexer no código.
    Decomposição tem a ver com funções puras?
    Tem. Quando você decompõe bem, muitas das funções menores acabam sendo puras (só calculam a partir das entradas e retornam), o que as torna fáceis de testar. Decompor e manter as partes puras são hábitos que se reforçam e levam a um código organizado e confiável.
    Isso vale só para programas grandes?
    O ganho é maior nos grandes, mas o hábito se treina nos pequenos. Mesmo num programa médio, separar em funções com nomes claros deixa tudo mais legível. E a decomposição é a porta de entrada para a recursão, o próximo assunto, que é uma forma especial e elegante de dividir para conquistar.

    Fontes

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