源地址 https://tour.go-zh.org/moretypes/26
一、题目描述
让我们用函数做些好玩的事情。
实现一个 fibonacci
函数,它返回一个函数(闭包),该闭包返回一个斐波纳契数列 `(0, 1, 1, 2, 3, 5, ...)`。
二、题目分析
- 要实现一个fibonacci函数;
- 使该函数返回一个闭包;
- 该闭包再返回一个斐波那契数列;
- 闭包函数会引用函数体以外的值,可以对其修改。
三、Go代码
package main import "fmt" // fibonacci is a function that returns // a function that returns an int. func fibonacci() func() int { back1, back2:= 0, 1 // 预先设定好两个初始值 return func() int { temp := back1 //记录(back1)的值 back1,back2 = back2,(back1 + back2) // 重新赋值(这个就是核心代码) return temp //返回temp } } func main() { f := fibonacci() //返回一个闭包函数 for i := 0; i < 10; i++ { //打印斐波纳契数列 fmt.Println(f()) } }
运行结果