References:
- StackOverflow question
- Fibonacci Wikipedia
- Test it out in the go playground
package main
import "fmt"
func fibonacci() func() int {
n_minus_2, n_minus_1 := 0, 1
current := 0
return func() int {
current = n_minus_2 + n_minus_1 // calculate current "fibonacci" number
// update previous numbers
// do this after calculating the current number
n_minus_2, n_minus_1 = n_minus_1, current
return current
}
}
func main() {
f := fibonacci()
for i := 0; i < 10; i++ {
fmt.Println(f())
}
}
// This implementation starts at 1
// Returns:
// 1
// 2
// 3
// 5
// 8
// 13
// 21
// 34
// 55
// 89