源地址 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()) } }
運行結果