Mental Model
Remember past Fibonacci numbers so you don't calculate them again.
Analogy: Like writing down each step of a recipe so you don't have to guess or redo steps later.
fib[0] = 0 fib[1] = 1 fib[2] = ? fib[3] = ? fib[4] = ? ...
fib[0] = 0 fib[1] = 1 fib[2] = ? fib[3] = ? fib[4] = ? ...
fib: [0, 1, ?, ?, ?, ?]
fib: [0, 1, 1, ?, ?, ?]
fib: [0, 1, 1, 2, ?, ?]
fib: [0, 1, 1, 2, 3, ?]
fib: [0, 1, 1, 2, 3, 5]
fib: [0, 1, 1, 2, 3, 5] Answer: 5
package main import "fmt" func fibonacciDP(n int) int { if n <= 1 { return n } fib := make([]int, n+1) fib[0], fib[1] = 0, 1 for i := 2; i <= n; i++ { fib[i] = fib[i-1] + fib[i-2] } return fib[n] } func main() { result := fibonacciDP(5) fmt.Println(result) }
if n <= 1 {
return n
}fib := make([]int, n+1)
fib[0], fib[1] = 0, 1for i := 2; i <= n; i++ {
fib[i] = fib[i-1] + fib[i-2]
}return fib[n]if n <= 1 { return n }
if n <= 1 { return n }
fib := make([]int, n+1)
func fibDP(n int) int {
fib := make([]int, n+1)
fib[0], fib[1] = 0, 1
for i := 2; i <= n; i++ {
fib[i] = fib[i-1] + fib[i-2]
}
return fib[n]
}
fmt.Println(fibDP(5))func fibDP(n int) int {
fib := make([]int, n)
fib[0], fib[1] = 0, 1
for i := 2; i <= n; i++ {
fib[i] = fib[i-1] + fib[i-2]
}
return fib[n]
}Pass the test and this pattern moves unknown