这个是A Tour of Go这个教程里面的第四个练习,原题如下:
实现一个
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 {
}
func main() {
f := fibonacci()
for i := 0; i < 10; i++ {
fmt.Println(f())
}
}
这题需要fibonacci
函数返回一个闭包函数,这个闭包函数需要引用函数体外的变量,并对其进行修改,以保存中间结果——该数列的最新的两个值。实现代码如下:
package main
import "fmt"
// 返回一个“返回int的函数”
func fibonacci() func() int {
x, y := 1, 0 // 初始值
return func() int {
// 注意:这里需要从0开始返回
x, y = y, x+y
return x
}
}
func main() {
f := fibonacci()
for i := 0; i < 10; i++ {
fmt.Println(f())
}
}
输出结果如下:
0
1
1
2
3
5
8
13
21
34