1. 斐波那契数列,从第三个数字开始,每个数字都是前两个数字的和。
    2. 所以,我们需要在fibonacci函数中定义三个变量x1x2sum
    3. 而返回值使用闭包的方式,每次求和,扔掉x1的值,把x2的值赋值给x1,把sum的值赋值给x2,达到保存最新的斐波那契数字的目的。

    sum就是最终返回并打印的斐波那契数列的一个一个的值。

    1. ackage main
    2. import "fmt"
    3. // fibonacci 函数会返回一个返回 int 的函数。
    4. func fibonacci() func() int {
    5. x1, x2 := 0, 1
    6. sum := 0
    7. return func() int {
    8. sum = x1 + x2
    9. x1 = x2
    10. x2 = sum
    11. return sum
    12. }
    13. }
    14. func main() {
    15. f := fibonacci()
    16. for i := 0; i < 10; i++ {
    17. fmt.Print(f(),", ")
    18. }
    19. fmt.Println("...")
    20. }

    此例,因为斐波那契数字自身就具备循环的所有变量,因此,在打印语句中调用fibonacci()函数对应变量时无需给出输入参数。

    运行结果
    1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …


    Go 斐波那契闭包 - 图1