这个是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
Tags:

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.