🧩 Exercícios: Recursividade, Pilha de Execução e Tail Recursion
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:
- 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)
- Salve o arquivo como:
Atividade_09_1_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_09_2_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_09_3_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_09_4_SeuNome - 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;
}