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).

  1. Crie o arquivo fatorial.c na pasta src/:
#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

  1. Abra o terminal integrado.
  2. Compile: gcc fatorial.c -o fatorial
  3. 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)


Capitulo Anterior | Proximo Capitulo