这段代码出了什么问题?
package main
import "fmt"
// fibonacci is a function that returns
// a function that returns an int.
func fibonacci() func() int {
prev := 0
curr := 1
return func() int {
temp := curr
curr := curr + prev
prev := temp
return curr
}
}
func main() {
f := fibonacci()
for i := 0; i < 10; i++ {
fmt.Println(f())
}
}
prog.go:13:已声明并未使用
答案 0 :(得分:14)
您声明了一个名为prev
的变量,然后从未使用它。
具体来说,你说prev := temp
。这是在名为prev
的当前作用域中创建一个新的局部变量。我假设您只想说prev = temp
,它会修改从周围范围继承的prev
变量。同样,您可能想在前一行中说curr = curr + prev
,而不是使用:=
。
答案 1 :(得分:2)
如果您进行Kevin Ballard建议的更改,则
package main
import "fmt"
// fibonacci is a function that returns
// a function that returns an int.
func fibonacci() func() int {
prev := 0
curr := 1
return func() int {
temp := curr
curr = curr + prev
prev = temp
return curr
}
}
func main() {
f := fibonacci()
for i := 0; i < 10; i++ {
fmt.Println(f())
}
}
输出:
1
2
3
5
8
13
21
34
55
89
输出不是Fibonacci sequence。
package main
import "fmt"
func fibonacci() func() int {
a, b := 0, 1
return func() (f int) {
f, a, b = a, b, a+b
return
}
}
func main() {
f := fibonacci()
for i := 0; i < 10; i++ {
fmt.Println(f())
}
}
输出:
0
1
1
2
3
5
8
13
21
34