在线文档  >   Golang练习   >   递归

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 知道该调用哪个函数。
        return fib(n-1) + fib(n-2)
    }

    fmt.Println(fib(7))
}

运行结果如下:

$ go run recursion.go 
5040
13