Capítulo 17: Recursividade 🌀🛌
Neste capítulo, vamos aprender sobre Recursividade, que é quando uma função chama a ela mesma, com o tema do filme Inception (A Origem)!
📖 O que é Recursividade?
Uma função recursiva é aquela que resolve um problema chamando a si mesma com uma versão menor do mesmo problema. É como entrar em um sonho dentro de outro sonho!
Para não ficarmos presos no sonho para sempre (loop infinito), toda função recursiva precisa de uma Condição de Parada (o “chute” para acordar).
📖 Exemplo Guiado: Contagem Regressiva para Acordar
Vamos criar uma função que faz uma contagem regressiva para o personagem acordar das camadas de sonho.
- Crie o arquivo
inception.gona pastasrc/:
package main
import "fmt"
func aprofundarSonho(camada int) {
if camada == 0 {
fmt.Println("BUM! Chegamos ao limbo. Hora de acordar!")
return // Condição de parada!
}
fmt.Println("Entrando na camada de sonho:", camada)
// A função chama a si mesma passando um valor menor!
aprofundarSonho(camada - 1)
fmt.Println("Acordando e voltando da camada:", camada)
}
func main() {
fmt.Println("Iniciando a missao...")
aprofundarSonho(3)
fmt.Println("Missao concluida. Todos acordados!")
}🕹️ Como Executar e Testar no VS Code
- Abra o terminal integrado.
- Execute:
go run inception.go
Resultado Esperado:
Iniciando a missao...
Entrando na camada de sonho: 3
Entrando na camada de sonho: 2
Entrando na camada de sonho: 1
BUM! Chegamos ao limbo. Hora de acordar!
Acordando e voltando da camada: 1
Acordando e voltando da camada: 2
Acordando e voltando da camada: 3
Missao concluida. Todos acordados!📊 Ilustração Visual: Pilha de Chamadas
Veja como as funções se empilham e depois voltam:
graph TD A["1. aprofundarSonho(3)"] --> B["2. aprofundarSonho(2)"] B --> C["3. aprofundarSonho(1)"] C --> D["4. Limbo (Parada)"] D --> C C --> B B --> A
🛠️ Prática Obrigatória 1: Fatorial (Multiplicação em Cadeia)
Crie uma função recursiva chamada fatorial(n int) int. O fatorial de um número é ele multiplicado pelos seus antecessores (ex: fatorial(3) é 3 * 2 * 1 = 6). A condição de parada é quando n == 1 (retorna 1). Teste na main calculando o fatorial de 5!
🔑 Gabarito de Código
Prática 1: fatorial.go
package main
import "fmt"
func fatorial(n int) int {
if n == 1 {
return 1 // Parada
}
// Chama a si mesma multiplicando
return n * fatorial(n-1)
}
func main() {
numero := 5
resultado := fatorial(numero)
fmt.Println("O fatorial de", numero, "e:", resultado)
}