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


🧭 Navegação Pedagógica


🎯 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:

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

  1. Salve o arquivo como: Atividade_17_1_SeuNome
  2. 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:

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

  1. Salve o arquivo como: Atividade_17_2_SeuNome
  2. 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:

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

  1. Salve o arquivo como: Atividade_17_3_SeuNome
  2. 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:

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

  1. Salve o arquivo como: Atividade_17_4_SeuNome
  2. 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