0Pricing
C Academy · Aula

Recursão versus iteração

Saiba quando escolher cada uma.

Recursão versus iteração é uma aula grátis de C Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C Academy inclui 4 aulas no total.

Duas Formas de Repetir

Muitos problemas podem ser resolvidos com recursão ou iteração. A iteração usa laços; a recursão usa chamadas de função.

Ambas podem produzir o mesmo resultado, mas diferem em estilo, uso de memória e velocidade.

Fatorial com um Laço

Aqui está o fatorial escrito de forma iterativa com um laço for. Nenhuma função chama a si mesma; uma única variável acumula o produto.

#include <stdio.h>

long factorial(int n) {
    long result = 1;
    for (int i = 2; i <= n; i++)
        result *= i;
    return result;
}

int main(void) {
    printf("%ld\n", factorial(6));
    return 0;
}

Fatorial com Recursão

A versão recursiva é mais curta e reproduz diretamente a definição matemática.

Ambas imprimem 720 para factorial(6), mas usam mecanismos diferentes.

long factorial(int n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}

Diferenças de Memória

A iteração normalmente usa uma quantidade fixa e pequena de memória: apenas algumas variáveis locais.

A recursão adiciona um quadro de pilha a cada chamada, portanto uma recursão profunda usa mais memória e pode ficar sem espaço na pilha.

Diferenças de Velocidade

Cada chamada recursiva tem um pequeno custo: configurar um quadro e retornar dele.

Para tarefas simples de contagem, os laços costumam ser um pouco mais rápidos porque evitam esse custo de chamada.

Quando a Recursão é Melhor

A recursão se destaca quando o problema é naturalmente recursivo, como em árvores, estruturas aninhadas ou algoritmos de divisão e conquista.

Nesses casos, o código recursivo é mais curto e claro do que o laço equivalente com uma pilha manual.

Quando a Iteração é Melhor

Para repetições lineares diretas, como somar um vetor ou fazer uma contagem, um laço é mais simples e usa memória constante.

Ele também evita qualquer risco de estouro da pilha com entradas grandes.

int sum_array(int a[], int n) {
    int total = 0;
    for (int i = 0; i < n; i++)
        total += a[i];
    return total;
}

A Mesma Tarefa, nos Dois Estilos

Somar de 1 até n pode ser feito das duas formas. Esta é a versão iterativa, que retorna a mesma resposta que a recursão.

#include <stdio.h>

int sum_to(int n) {
    int total = 0;
    for (int i = 1; i <= n; i++)
        total += i;
    return total;
}

int main(void) {
    printf("%d\n", sum_to(100));
    return 0;
}

Convertendo Recursão em um Laço

Qualquer recursão pode ser reescrita como iteração, às vezes usando sua própria pilha explícita.

Uma recursão linear simples, como a de fatorial ou soma, pode ser convertida em um laço comum com uma variável acumuladora.

#include <stdio.h>

int main(void) {
    int n = 5, result = 1;
    while (n > 1) { result *= n; n--; }
    printf("%d\n", result);
    return 0;
}

Observação sobre Recursão de Cauda

Uma chamada recursiva de cauda é a última ação de uma função. Alguns compiladores a otimizam como um laço, reutilizando um único quadro.

C não oferece essa garantia, portanto não dependa disso em recursões profundas.

int sum_tail(int n, int acc) {
    if (n == 0) return acc;
    return sum_tail(n - 1, acc + n);
}

Escolhendo uma Abordagem

Pergunte: o problema é naturalmente aninhado ou de divisão e conquista? Nesse caso, a recursão é adequada.

É uma repetição linear simples com uma entrada possivelmente enorme? Então a iteração é mais segura e geralmente mais rápida.

Verificação Rápida

Compare as duas abordagens.

Recapitulação

Recursão e iteração podem resolver os mesmos problemas. Os laços usam memória constante e são excelentes para tarefas lineares; a recursão é mais clara para problemas aninhados e de divisão e conquista, mas custa um quadro de pilha por chamada.

Perguntas Frequentes

A aula “Recursão versus iteração” é grátis?

Sim — o texto completo de “Recursão versus iteração” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C Academy, atualize para CoddyKit PRO. O curso de C Academy inclui 4 aulas no total.

O que vou aprender em “Recursão versus iteração”?

Saiba quando escolher cada uma. Você pratica C Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C Academy?

Nenhuma experiência prévia é necessária. C Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Recursão versus iteração”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C Academy?

Sim. Cada aula de C Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Como funciona a recursão
  2. Problemas recursivos clássicos
  3. Recursão versus iteração
  4. Evitando estouro de pilha
← Voltar para C Academy