Spec Sistemas Com C • Trilha Progressiva em 4 Níveis


🎯 Nível 1: Fundamentos

Problema 09.1 — Função Recursiva Simples com Caso Base Explícito

Contexto: Função Recursiva Simples com Caso Base Explícito no contexto de Recursividade, Pilha de Execução e Tail Recursion.

Requisitos de Execução:

  1. Implementar cálculo da sequência de Fibonacci recursiva com tratamento de casos base n <= 1.

Resultado Esperado

Fibonacci(7) = 13 calculado por chamadas recursivas.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_09_1_SeuNome
  2. Envie na tarefa: Atividade Cap 09 - Recursividade, Pilha de Execução e Tail Recursion
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>

int fibonacci(int n) {
    if (n <= 0) return 0;
    if (n == 1) return 1;
    return fibonacci(n - 1) + fibonacci(n - 2);
}

int main(void) {
    printf("Fibonacci(7) = %d\n", fibonacci(7));
    return 0;
}

🔍 Nível 2: Prática

Problema 09.2 — Recursão em Cauda (Tail Recursion) e Otimização do Compilador

Contexto: Recursão em Cauda (Tail Recursion) e Otimização do Compilador no contexto de Recursividade, Pilha de Execução e Tail Recursion.

Requisitos de Execução:

  1. Reescrever o cálculo fatorial como Tail Recursive acumulando resultado no parâmetro acumulador.

Resultado Esperado

Fatorial em Tail Call Recursion otimizado em O(1) de espaço de pilha pelo compilador.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_09_2_SeuNome
  2. Envie na tarefa: Atividade Cap 09 - Recursividade, Pilha de Execução e Tail Recursion
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>

unsigned long long fatorial_tail(int n, unsigned long long acc) {
    if (n <= 1) return acc;
    return fatorial_tail(n - 1, n * acc);
}

int main(void) {
    printf("Fatorial Tail(6) = %llu\n", fatorial_tail(6, 1));
    return 0;
}

⚡ Nível 3: Integração

Problema 09.3 — Problema da Torre de Hanói Resolvido Recursivamente

Contexto: Problema da Torre de Hanói Resolvido Recursivamente no contexto de Recursividade, Pilha de Execução e Tail Recursion.

Requisitos de Execução:

  1. Imprimir sequência exata de movimentos para transferir N discos entre pinos Origem, Destino e Auxiliar.

Resultado Esperado

Sequência de movimentos de Hanói gerada com 2^N - 1 passos.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_09_3_SeuNome
  2. Envie na tarefa: Atividade Cap 09 - Recursividade, Pilha de Execução e Tail Recursion
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>

void hanoi(int n, char origem, char destino, char aux) {
    if (n == 1) {
        printf("Mover disco 1 de %c para %c\n", origem, destino);
        return;
    }
    hanoi(n - 1, origem, aux, destino);
    printf("Mover disco %d de %c para %c\n", n, origem, destino);
    hanoi(n - 1, aux, destino, origem);
}

int main(void) {
    hanoi(3, 'A', 'C', 'B');
    return 0;
}

🏆 Nível 4: Desafio Corporativo

Problema 09.4 — Detecção de Profundidade Máxima de Pilha e Prevenção de Stack Overflow

Contexto: Detecção de Profundidade Máxima de Pilha e Prevenção de Stack Overflow no contexto de Recursividade, Pilha de Execução e Tail Recursion.

Requisitos de Execução:

  1. Monitorar o consumo do ponteiro de pilha e limitar a recursão a um teto seguro antes de esgotar o stack.

Resultado Esperado

Pilha protegida contra estouro (Stack Overflow prevenida).

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_09_4_SeuNome
  2. Envie na tarefa: Atividade Cap 09 - Recursividade, Pilha de Execução e Tail Recursion
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>

#define MAX_RECURSAO 500

void recursao_segura(int nivel) {
    if (nivel > MAX_RECURSAO) {
        puts("ALERTA: Limite de profundidade de pilha atingido. Abortando recursao.");
        return;
    }
    if (nivel % 100 == 0) printf("Profundidade de pilha: %d\n", nivel);
    recursao_segura(nivel + 1);
}

int main(void) {
    recursao_segura(1);
    return 0;
}