7

这段代码有什么问题?

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: prev 声明但未使用

4

2 回答 2

16

您声明了一个名为的变量prev,然后从未使用过它。

具体来说,你说prev := temp。这是在当前范围内创建一个新的局部变量,名为prev. 我假设您只想说prev = temp,它修改了prev从周围范围继承的变量。同样,您可能打算curr = curr + prev在上一行说,而不是使用:=.

于 2013-02-16T00:54:43.527 回答
3

如果您做出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

输出不是斐波那契数列。

对于斐波那契数列,

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
于 2013-02-16T04:23:51.790 回答