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

ケビン・バラードが提案した変更を加えると、

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 に答える