Go 示例: 递归

Go 支持 递归函数。以下是一个经典示例。

package main
import "fmt"

这个 fact 函数会不断调用自身,直到到达 fact(0) 的基本情况。

func fact(n int) int {
    if n == 0 {
        return 1
    }
    return n * fact(n-1)
}
func main() {
    fmt.Println(fact(7))

闭包也可以是递归的,但这需要在定义闭包之前用带类型的 var 显式声明闭包。

    var fib func(n int) int
    fib = func(n int) int {
        if n < 2 {
            return n
        }

由于 fib 之前在 main 中声明过,Go 知道这里调用 fib 时要调用哪个函数。

        return fib(n-1) + fib(n-2)
    }
    fmt.Println(fib(7))
}
$ go run recursion.go 
5040
13

下一个示例:指针.