3 回答
TA贡献1934条经验 获得超2个赞
我最喜欢的实现斐波那契数列迭代的简洁方法是使用firstas f i - 1和secondas f i。斐波那契方程指出:
f i + 1 = f i + f i - 1
除非我们在代码中编写此内容,否则在下一轮中我们将递增i。所以我们正在有效地做:
f下一个 i = f当前 i + f当前 i - 1
和
f下一个 i - 1 = f当前 i
我喜欢在代码中实现这一点的方式是:
first, second = second, first + second
该first = second部分对应更新 f next i - 1 = f current i,该second = first + second部分对应更新 f next i = f current i + f current i - 1。
然后我们剩下要做的就是返回 first 的旧值,因此我们将在进行更新之前将其存储在临时变量中。总的来说,我们得到:
// fibonacci returns a function that returns
// successive fibonacci numbers from each
// successive call
func fibonacci() func() int {
first, second := 0, 1
return func() int {
ret := first
first, second = second, first+second
return ret
}
}
在Go Playground上查看它的运行情况。
TA贡献1842条经验 获得超21个赞
另一种方法
func fibonacci() func() int {
n1, n := -1, 1
return func() int {
n1, n = n, n1+n
return n
}
}
- 3 回答
- 0 关注
- 270 浏览
添加回答
举报