🧩 Exercícios: Recursividade: Caso Base, Call Stack e Otimizações
Spec Sistemas Com Go • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 Nível 1: Fundamentos
Problema 17.1 — Função Recursiva Simples: Fatorial e Casos Base
Contexto: Função Recursiva Simples: Fatorial e Casos Base no contexto de Recursividade: Caso Base, Call Stack e Otimizações.
Requisitos de Execução:
- Implementar cálculo de fatorial com caso base explícito
n <= 1.
Resultado Esperado
Fatorial recursivo calculado com sucesso.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_17_1_SeuNome - Envie na tarefa:
Atividade Cap 17 - Recursividade: Caso Base, Call Stack e Otimizações
🔑 Gabarito de Código & Solução Comentada
package main
import "fmt"
func fatorial(n uint64) uint64 {
if n <= 1 { return 1 }
return n * fatorial(n - 1)
}
func main() {
fmt.Printf("Fatorial 6! = %d\n", fatorial(6))
}
🔍 Nível 2: Prática
Problema 17.2 — Busca em Árvore Binária com Recursão
Contexto: Busca em Árvore Binária com Recursão no contexto de Recursividade: Caso Base, Call Stack e Otimizações.
Requisitos de Execução:
- Percorrer nós de árvore binária em ordem (In-Order Traversal) recursivamente.
Resultado Esperado
Travessia em ordem da árvore binária concluída.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_17_2_SeuNome - Envie na tarefa:
Atividade Cap 17 - Recursividade: Caso Base, Call Stack e Otimizações
🔑 Gabarito de Código & Solução Comentada
package main
import "fmt"
type Node struct { Val int; Left, Right *Node }
func inOrder(n *Node) {
if n == nil { return }
inOrder(n.Left)
fmt.Printf("%d ", n.Val)
inOrder(n.Right)
}
func main() {
raiz := &Node{Val: 20, Left: &Node{Val: 10}, Right: &Node{Val: 30}}
inOrder(raiz)
fmt.Println()
}
⚡ Nível 3: Integração
Problema 17.3 — Recursão com Memoização para Evitar Complexidade Exponencial
Contexto: Recursão com Memoização para Evitar Complexidade Exponencial no contexto de Recursividade: Caso Base, Call Stack e Otimizações.
Requisitos de Execução:
- Otimizar Fibonacci com mapa de memoização reduzindo complexidade de O(2^N) para O(N).
Resultado Esperado
Fibonacci(50) calculado instantaneamente com memoização.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_17_3_SeuNome - Envie na tarefa:
Atividade Cap 17 - Recursividade: Caso Base, Call Stack e Otimizações
🔑 Gabarito de Código & Solução Comentada
package main
import "fmt"
var memo = make(map[int]uint64)
func fiboMemo(n int) uint64 {
if n <= 1 { return uint64(n) }
if v, ok := memo[n]; ok { return v }
memo[n] = fiboMemo(n-1) + fiboMemo(n-2)
return memo[n]
}
func main() {
fmt.Println("Fibo(40):", fiboMemo(40))
}
🏆 Nível 4: Desafio Corporativo
Problema 17.4 — Varredura Recursiva de Diretórios com filepath.WalkDir
Contexto: Varredura Recursiva de Diretórios com filepath.WalkDir no contexto de Recursividade: Caso Base, Call Stack e Otimizações.
Requisitos de Execução:
- Percorrer árvore de diretórios do sistema de arquivos recursivamente filtrando arquivos
.go.
Resultado Esperado
Varredura recursiva de diretórios concluída com alta performance.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_17_4_SeuNome - Envie na tarefa:
Atividade Cap 17 - Recursividade: Caso Base, Call Stack e Otimizações
🔑 Gabarito de Código & Solução Comentada
package main
import (
"fmt"
"io/fs"
"path/filepath"
)
func main() {
filepath.WalkDir(".", func(path string, d fs.DirEntry, err error) error {
if !d.IsDir() && filepath.Ext(path) == ".go" {
fmt.Println("Arquivo Go:", path)
}
return nil
})
}
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |