Go supports recursive functions. Here’s a classic example.
package main
import "fmt"
// This fact function calls itself
// until it reaches the base case of fact(0).
func fact(n int) int {
if n == 0 {
return 1
}
return n * fact(n-1)
}
func main() {
fmt.Println(fact(7))
// Closures can also be recursive
// but this requires the closure to be declared
// with a typed var explicitly before it’s defined.
var fib func(n int) int
fib = func(n int) int {
if n < 2 {
return n
}
// Since fib was previously declared in main
// Go knows which function to call with fib here.
return fib(n-1) + fib(n-2)
}
fmt.Println(fib(7))
}
$ go run recursion.go
5040
13
Source | License