在线文档 > 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