登录
首页 >  Golang >  Go问答

如何在代码中实现从1 1 2开始的斐波那契数列

来源:stackoverflow

时间:2024-03-22 11:00:32 184浏览 收藏

本篇文章探讨如何在代码中实现从 1 1 2 开始的斐波那契数列。作者指出现有的解决方案只能生成从 1 2 3 开始的序列,并提出了一种修改后的函数,可以生成从 0 1 1 2 开始的序列。作者强调,修改后的解决方案通过返回初始值而不是计算后的值,实现了正确的序列生成。

问题内容

我搜索过较旧的问题,有很多。但是我找不到我的案例的答案。

func fibonacci() func() int {
    y := 0
    z := 1

    return func () int {

        res := y + z
        y = z
        z = res

        return res

    }
}

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

这会产生 1 2 3 5 8

我应该改变什么(尽可能少)才能得到 0 1 1 2 3 5 8 ?

实际上我设法解决了如果初始 yz 是这样的:

y := -1
    z := 1

但这是一个幸运的黑客,我想要一个合乎逻辑的解决方案。


解决方案


更改您的函数以将 res 返回到此:

return func () int {

    res := y
    y = z
    z = res + z

    return res

}

这样您首先输出初始值,然后计算下一个值。您当前的解决方案会在返回初始值之前覆盖它们。

如果您添加:

x := y

并将返回语句更改为

return x

您将返回初始 y := 0 值,而不是计算出的 res := y + z,因此返回序列中较早的值 2,即 0, 1, 1, 2, 3, 5, ...

(但我不认为 -1、1 初始化器是一种 hack。)

终于介绍完啦!小伙伴们,这篇关于《如何在代码中实现从1 1 2开始的斐波那契数列》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>