厚土Go学习笔记 | 27. 斐波纳契闭包

此例我们用 go 语言的闭包实现一个斐波那契数列的返回值。

斐波那契数列,从第三个数字开始,每个数字都是前两个数字的和。

所以,我们需要在 fibonacci 函数中定义三个变量 x1,x2,sum

而返回值使用闭包的方式,每次求和,扔掉x1的值,把x2的值赋值给x1,把sum的值赋值给x2,达到保存最新的斐波那契数字的目的。

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

package main

import "fmt"

// fibonacci 函数会返回一个返回 int 的函数。
func fibonacci() func() int {
    x1, x2 := 0, 1
    sum := 0
    return func() int {
        sum = x1 + x2
        x1 = x2
        x2 = sum
        return sum
    }
}

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

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

运行结果

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2017-12-19

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hongten

python开发_python中字符串string操作

在python中,对于字符串string的操作,我们有必要了解一下,这样在我们的以后的开发中会给我们带来很多方便

11830
来自专栏Pythonista

Golang之接口(interface)

 //Golang中的接口,不需要显示的实现。只要一个变量,含有接口类型中的所有方法,那么这个变量就实现了这个接口。

41130
来自专栏架构之路

斐波那契查找原理详解与实现

最近看见一个要求仅使用加法减法实现二分查找的题目,百度了一下,原来要用到一个叫做斐波那契查找的的算法。查百度,是这样说的: 斐波那契查找与折半查找很相似,他是根...

50080
来自专栏Golang语言社区

Go语言struct类型详解

struct Go语言中,也和C或者其他语言一样,我们可以声明新的类型,作为其它类型的属性或字段的容器。例如,我们可以创建一个自定义类型person代表一个人的...

366120
来自专栏Golang语言社区

Go语言struct类型详解

struct Go语言中,也和C或者其他语言一样,我们可以声明新的类型,作为其它类型的属性或字段的容器。例如,我们可以创建一个自定义类型person代表一个人的...

28840
来自专栏mySoul

设计模式 里氏替换原则

在场景中,三毛需要什么枪支,就直接new 出一个枪支即可,然后其内通过抽象类获取到对象,然后对齐进行修饰

13160
来自专栏码农笔录

斐波那契数列-Java

12420
来自专栏友弟技术工作室

golang之Struct什么是结构体struct?

最近在复习golang,学习的东西,如果不使用,很快就会忘记。所以,准备复习完golang,做一个练手的小项目,加深对golang的学习。今天开始公司,进入封闭...

60960
来自专栏分布式系统和大数据处理

.Net中的反射(动态创建类型实例) - Part.4

在前面节中,我们先了解了反射,然后利用反射查看了类型信息,并学习了如何创建自定义特性,并利用反射来遍历它。可以说,前面三节,我们学习的都是反射是什么,在接下来的...

15130
来自专栏Golang语言社区

Golang语言社区--标准库strings包讲解

大家好,我是Golang语言社区主编彬哥,本篇文章是给大家转载关于标准库strings包的知识。

976160

扫码关注云+社区

领取腾讯云代金券