3 回答

TA貢獻1803條經驗 獲得超6個贊
更改您的函數以將 res 返回為此:
return func () int {
res := y
y = z
z = res + z
return res
}
這樣,您首先輸出初始值,然后計算下一個值。您當前的解決方案會在返回之前覆蓋初始值。

TA貢獻2041條經驗 獲得超4個贊
例如,
package main
import "fmt"
// fibonacci returns a function that returns
// successive Fibonacci numbers.
func fibonacci() func() int {
a, b := 0, 1
return func() (f int) {
if a < 0 {
panic("overflow")
}
f, a, b = a, b, a+b
return f
}
}
func main() {
f := fibonacci()
for i := 0; i < 10; i++ {
fmt.Println(f())
}
}
游樂場:https://play.golang.org/p/uYHEK_ZgE6K
輸出:
0
1
1
2
3
5
8
13
21
34

TA貢獻1862條經驗 獲得超7個贊
如果您添加:
x := y
并將返回語句更改為
return x
您將返回初始y := 0
值,而不是計算值res := y + z
,因此返回序列中較早的值 2 ,給您0, 1, 1, 2, 3, 5, ...
(但我不認為-1, 1
初始化器是黑客。)
- 3 回答
- 0 關注
- 166 瀏覽
添加回答
舉報