A Tour of Go "moretypes/26"

フィボナッチ実装に5分位かかってもう廃業しようかもと思った。

package main

import "fmt"

// fibonacci is a function that returns
// a function that returns an int.
func fibonacci() func() int {
	n := -1
	fn := 0
	fnP1 := 1
	fnP2 := 0
	return func() int {
		n += 1
		if n == 0 {
			return 0
		} else if n == 1 {
			return 1
		} else {
			fnP2 = fn + fnP1
			fn = fnP1
			fnP1 = fnP2
			return fnP2
		}
	}
}

func main() {
	f := fibonacci()
	for i := 0; i < 10; i++ {
		fmt.Println(f())
	}
}