我应该在代码中更改什么来生成从 0 1 1 开始的斐波那契数列

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



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 ?


实际上我设法解决了这个问题,如果最初y是z这样的:


    y := -1

    z := 1

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


斯蒂芬大帝
浏览 118回答 3
3回答

慕码人8056858

更改您的函数以将 res 返回为此:&nbsp;return func () int {&nbsp; &nbsp; res := y&nbsp; &nbsp; y = z&nbsp; &nbsp; z = res + z&nbsp; &nbsp; return res}这样,您首先输出初始值,然后计算下一个值。您当前的解决方案会在返回之前覆盖初始值。

缥缈止盈

例如,package mainimport "fmt"// fibonacci returns a function that returns// successive Fibonacci numbers.func fibonacci() func() int {&nbsp; &nbsp; a, b := 0, 1&nbsp; &nbsp; return func() (f int) {&nbsp; &nbsp; &nbsp; &nbsp; if a < 0 {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; panic("overflow")&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; f, a, b = a, b, a+b&nbsp; &nbsp; &nbsp; &nbsp; return f&nbsp; &nbsp; }}func main() {&nbsp; &nbsp; f := fibonacci()&nbsp; &nbsp; for i := 0; i < 10; i++ {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println(f())&nbsp; &nbsp; }}游乐场:https://play.golang.org/p/uYHEK_ZgE6K输出:0112358132134

牧羊人nacy

如果您添加:x&nbsp;:=&nbsp;y并将返回语句更改为return&nbsp;x您将返回初始y := 0值,而不是计算值res := y + z,因此返回序列中较早的值 2 ,给您0, 1, 1, 2, 3, 5, ...(但我不认为-1, 1初始化器是黑客。)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go