前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >厚土Go学习笔记 | 27. 斐波纳契闭包

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

作者头像
李海彬
发布2018-03-28 11:55:05
8960
发布2018-03-28 11:55:05
举报
文章被收录于专栏:Golang语言社区Golang语言社区

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

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

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

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

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

代码语言:javascript
复制
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 函数对应变量时无需给入参数。

运行结果

代码语言:javascript
复制
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档