斐波纳契闭包

需求

实现一个 fibonacci 函数,它返回一个函数(闭包), 该闭包返回一个斐波纳契数列 (0, 1, 1, 2, 3, 5, ...)

闭包

闭包是一个函数值,它引用了其函数体之外的变量。 该函数可以访问并赋予其引用的变量的值,换句话说,该函数被“绑定”在了这些变量上 函数值不仅仅是代码,它也有状态,匿名内部函数能够访问和更新外部函数的局部变量

斐波纳契数列

知乎上有关于斐波哪契数列的精彩回答: 斐波那契数列为什么那么重要,所有关于数学的书几乎都会提到?

实现

package main

import "fmt"

// fibonacci is a function that returns
// a function that returns an int.
func fibonacci() func() int {
	i, j := 0, 1
	return func() int {
		fn := i
		i, j = j, i+j
		return fn 
	}
}

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

运行结果

0
1
1
2
3
5
8
13
21
34