专栏首页中二病也要当白帽子go指南:斐波纳契闭包练习

go指南:斐波纳契闭包练习

题目

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

实现一个 fibonacci 函数,它返回一个函数(闭包),该闭包返回一个斐波纳契数列 (0, 1, 1, 2, 3, 5, ...)

代码

package main

import "fmt"

// 返回一个“返回int的函数”
func fibonacci() func() int {
    i := 0
    j := 1
    flag := false
    return func() int{
        var res int
        flag = !flag
        if flag {
            res = i
            i += j
        }else {
            res = j
            j += i
        }
        return res
    }
}

func main() {
    f := fibonacci()
    for i := 0; i < 10; i++ {
        fmt.Println(f())
    }
}

更好的写法可能是这样

func fibonacci1() func() int {
    back1, back2:= 0, 1

    return func() int {
        temp:=back1
        back1,back2=back2,(back1 + back2)
        return temp
    }

}

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 编程从入门到放弃(1031)-C语言实现埃特巴什码的加密与解密

    最近要准备某个考试,没时间更了,只能大概写一下了。这个新手可能不好理解,但是我希望大家都能理解。Orz,我将埃特巴什码的加解密分成了三步。

    xuing
  • go指南:切片练习

    练习:切片 实现 Pic。它应当返回一个长度为 dy 的切片,其中每个元素是一个长度为 dx,元素类型为 uint8 的切片。当你运行此程序时,它会将每个整数...

    xuing
  • 群邮件钓鱼软件的简单分析并拿到后台

    不知道从何时起,qq群邮件就成为了钓鱼软件传播的一个绝佳场所,什么“”萌妹变声器”,“破解UU加速器”。 我偶尔闲的无聊的时候,就会下载下来耗费几分钟逆(ti...

    xuing
  • 百炼OJ 2972 2973

    一、2972相邻数字的基数等比:确定进制      所谓基数等比就是后一个数与前一个数有倍数的关系。如 111 = 1 + 1 * 2(1 + 2 * 1); ...

    CloudDeveloper
  • 二维变长数组

    青木
  • 沙龙回顾 |大数据精准营销且看运营商如何玩

    近年来,无论你在刷微博、微信朋友圈、QQ空间、小窗口等等,都会在无疑中看到广告,而且那条广告还是你关注的,恭喜你,你被精准营销了。最高境界的精准营销,无限趋近于...

    灯塔大数据
  • 3411 洪水

    3411 洪水 CodeVS原创  时间限制: 1 s  空间限制: 64000 KB  题目等级 : 青铜 Bronze 题解  查看运行结果 题目描述 De...

    attack
  • TensorFlow可以“预装”数据集了,新功能Datasets出炉

    训练机器学习模型的时候,需要先找数据集、下载、装数据集……太麻烦了,比如MNIST这种全世界都在用的数据集,能不能来个一键装载啥的?

    量子位
  • 网易2013校园招聘笔试题详解

    http://blog.csdn.net/silangquan/article/details/18142651

    bear_fish
  • 程序如何运行的

    在写代码的时候,我们直接在没有编译报错的时候,直接点击运行后,ide会直接把程序的结果输出到控制台上,代码如下:

    付威

扫码关注云+社区

领取腾讯云代金券