首页 > 解决方案 > 我应该在代码中更改什么以生成从 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 ?

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

    y := -1
    z := 1

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

标签: algorithmgofibonacci

解决方案


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

 return func () int {

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

    return res

}

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


推荐阅读