Capítulo 14: Recursividade 🌀🛌
Neste capítulo, vamos aprender sobre Recursividade, que é quando uma função chama a si mesma para resolver um problema, com o tema do filme A Origem (Inception) (sonhos dentro de sonhos)!
📖 O que é Recursividade?
Uma função recursiva é uma função que chama a si mesma. Para não ficar chamando a si mesma para sempre (e travar o computador), ela precisa de uma Condição de Parada (caso base).
É como entrar em um sonho dentro de outro sonho, mas precisar saber quando acordar!
📖 Exemplo Guiado: Fatorial (Sonhos dentro de Sonhos)
O cálculo do fatorial de um número é o exemplo clássico de recursividade. O fatorial de 5 é 5 * 4 * 3 * 2 * 1. Ou seja, 5 * fatorial(4).
- Crie o arquivo
fatorial.cna pastasrc/:
#include <stdio.h>
int fatorial(int n) {
// Caso Base: Condição de parada (acordar do sonho)
if (n == 0 || n == 1) {
return 1;
}
// Chamada recursiva (entrar em um sonho mais profundo)
return n * fatorial(n - 1);
}
int main() {
int numero = 5;
int resultado;
resultado = fatorial(numero);
printf("O fatorial de %d e: %d\n", numero, resultado);
return 0;
}🕹️ Como Executar e Testar no VS Code
- Abra o terminal integrado.
- Compile:
gcc fatorial.c -o fatorial - Execute:
./fatorial
Resultado Esperado:
O fatorial de 5 e: 120📊 Ilustração Visual: Pilha de Recursão
Veja como as chamadas se empilham e depois resolvem:
graph TD A["fatorial(3)"] -->|Chama| B["3 * fatorial(2)"] B -->|Chama| C["2 * fatorial(1)"] C -->|Caso Base| D[Retorna 1] C -->|Calcula: 2 * 1| E[Retorna 2] B -->|Calcula: 3 * 2| F[Retorna 6]
🛠️ Prática Obrigatória 1: Contagem Regressiva Recursiva
Crie uma função recursiva chamada contagem_recursiva(int n) que receba um número e exiba a contagem regressiva dele até 0. A função deve chamar a si mesma com n-1 até chegar a 0.
🔑 Gabarito de Código
Prática 1: contagem_recursiva.c
#include <stdio.h>
void contagem_recursiva(int n) {
// Caso Base
if (n < 0) {
return;
}
printf("%d\n", n);
// Chamada recursiva
contagem_recursiva(n - 1);
}
int main() {
printf("Iniciando contagem:\n");
contagem_recursiva(5);
return 0;
}📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
(Siga o padrão estabelecido no Guia)