範例程式: 遞迴

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

下一個範例:指標