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
- Como funciona a recursão
- Problemas recursivos clássicos
- Recursão versus iteração
- Evitando estouro de pilha