欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Go指南练习_斐波纳契闭包

程序员文章站 2022-03-04 18:34:52
源地址 https://tour.go-zh.org/moretypes/26 一、题目描述 让我们用函数做些好玩的事情。 实现一个 fibonacci 函数,它返回一个函数(闭包),该闭包返回一个斐波纳契数列 `(0, 1, 1, 2, 3, 5, ...)`。 二、题目分析 要实现一个fibon ......

源地址

一、题目描述

让我们用函数做些好玩的事情。

实现一个 fibonacci 函数,它返回一个函数(闭包),该闭包返回一个 `(0, 1, 1, 2, 3, 5, ...)`。

Go指南练习_斐波纳契闭包

 

二、题目分析

  • 要实现一个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())
    }
}

 运行结果

Go指南练习_斐波纳契闭包