斐波纳契闭包
29 Sep 2017需求
实现一个 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