Go 对匿名函数和闭包进行递归

假设我们有一个关于费波那契数列的匿名函数fib

func main() {
    fib := func(n int) int {
        if n == 0 {
            return 0
        } else if n == 1 || n == 2 {
            return 1
        }
        return fib(n-1) + fib(n-2)
    }
    fmt.Println(fib(3))
}

当然,直接运行会编译失败,因为匿名函数没有名,在return处直接使用fib会提示undefined: fib
所以我们得先定义fib为一个函数,var fib func(int)int
之后就能用了

func main() {
    var fib func(int)int
    fib = func(n int) int {
        if n == 0 {
            return 0
        } else if n == 1 || n == 2 {
            return 1
        }
        return fib(n-1) + fib(n-2)
    }
    fmt.Println(fib(3))
}

闭包同理

你可能感兴趣的:(golang)