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

源地址 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())
    }
}

 运行结果

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏野路子程序员

Thinkphp修改一句代码,使得foreach标签支持对象,增加变量[数组对象]混合解析法!

2768
来自专栏Java爬坑系列

【JAVA零基础入门系列】Day11 Java中的类和对象

  今天要说的是Java中两个非常重要的概念——类和对象。   什么是类,什么又是对象呢?类是对特定集合的概括描述,比如,人,这个类,外在特征上,有名字,有年龄...

17610
来自专栏HelloCode开发者学习平台

BAT面试算法进阶(4)-无重复字符的最长子串

Given a string, find the length of the longest substring without repeating cha...

1092
来自专栏博客园

MSIL学习------从HelloWorld开始

  前段时间突然想搞搞IL语言,于是在博客园中找到了包建强前辈关于IL的文章学习,并且在包前辈博客里看到了09年他与赵劼前辈关于是否有必要学习IL语言的争论,作...

883
来自专栏算法修养

pta 习题集 5-17九宫格输入法

假设有九宫格输入法键盘布局如下: [ 1,.?! ] [ 2ABC ] [ 3DEF ] [ 4GHI ] [ 5JKL ] [ 6MNO ] [...

2827
来自专栏Coding迪斯尼

eactjs开发自制编程语言Monkey的编译器:高能技术干货之语法高亮2

1115
来自专栏前端迷

[译]JavaScript ES6  让我们写得少,做得多

JavaScript ES6 带来了新的语法和新的强大功能,使代码更现代,更易读。它允许您编写更少的代码并执行更多操作。 ES6 向我们介绍了许多强大的功能,如...

701
来自专栏游戏开发那些事

【游戏开发】小白学Lua(上)

  在很多游戏中,脚本语言是不可或缺的一部分,很多游戏都使用到了Lua,js,python一类的脚本,脚本语言可以在很多方面给开发进程带来帮助。脚本语言可以作为...

782
来自专栏机器学习从入门到成神

几种有关排序的常见面试问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

832
来自专栏技术/开源

从C#到TypeScript - 类型

从C#到TypeScript - 类型 TypeScript和C#一样是微软搞出来的,而且都是大牛Anders Hejlsberg领导开发的,它们之间有很多共同...

1935

扫码关注云+社区