algorithm - 我应该在代码中更改什么以生成从 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
但这是一个幸运的技巧,我想要一个合乎逻辑的解决方案。
解决方案
更改您的函数以将 res 返回到此:
return func () int {
res := y
y = z
z = res + z
return res
}
这样,您首先输出初始值,然后计算下一个值。您当前的解决方案会在初始值返回之前覆盖它们。
推荐阅读
- python - 模块没有出现在 jupyter
- javascript - FullCalendar React 中的 React Bootstrap Popover
- python - pip 配置了需要 TLS/SSL 的位置,但是 Python 中的 ssl 模块不可用。Catalina MacOS 中的 Python 3.6.5
- scala - scala:如果实例的类型静态地是基类,则使用基于宏的扩展类的方法调用特征默认impl
- themes - 在 Prestashop 1.7 中创建自定义主题(使用 Starter 主题?)
- c# - 使用 Roslyn 获取类型命名空间
- ios - 使用 Xamarin 和 Visual Studio 2019 构建 iOS 应用程序 - 未安装 Xcode 的错误版本
- node.js - React App 在本地运行,但在 Heroku 上因错误代码=H10 而崩溃
- php - 以分钟、小时、天等为单位的碳日期差异
- sass - SCSS 编译器无法使用 @media 的变量