Liangdi
4/16/2012 - 5:00 PM

Go语言练习:斐波纳契闭包

Go语言练习:斐波纳契闭包

package main

import "fmt"
// via http://www.talaland.com/go-tour-fibonacci/
// fibonacci 函数会返回一个返回 int 的函数。
func fibonacci() func() int {
        //count 用于计数调用次数,只要考虑0和1,不知有没有其他更好的方法
    //sum1 和 sum2 用于储存 fib函数的两次和的值
    var count,sum1,sum2 int= 0,1,1

    return func() int {
        switch count {
            //0 和 1 fib=1
            case 0,1:
                count++
            //其他 fib(n) = fib(n-1) + fib(n-2)
            default:
                sum1,sum2 = sum2,sum1+sum2
        }

        return sum2
    }

}

func main() {
    f := fibonacci()
    for i := 0; i < 10; i++ {
        fmt.Println(f())
    }
}