🦽
Go言語で再帰関数を使う
Go by Example: Recursion
Goは再帰関数をサポートしている。典型的な例を挙げよう。
このファクト関数は、fact(0)の基本ケースに達するまで、自分自身を呼び出す。
クロージャは再帰的であることもできるが、その場合はクロージャを定義する前に型付きvarで明示的に宣言する必要がある。
fibはあらかじめmainで宣言されているので、Goはここでfibを使ってどの関数を呼び出せばいいかを知っている。
package main
import "fmt"
// fact関数とは、nの階乗を返す関数
// nの階乗とは、n * (n-1) * (n-2) * ... * 1のこと
func fact(n int) int {
// nが0の場合は、1を返す
if n == 0 {
return 1
}
// nが0でない場合は、n * fact(n-1)を返す
return n * fact(n-1)
}
func main() {
// fact関数を呼び出す
fmt.Println(fact(7))
var fib func(n int) int
// fib関数を定義
fib = func(n int) int {
// nが0または1の場合は、nを返す
if n < 2 {
// ここでreturnすると、fib関数の定義が終わる
return n
}
// nが0または1でない場合は、fib(n-1) + fib(n-2)を返す
return fib(n-1) + fib(n-2)
}
fmt.Println(fib(7))
}
まとめ
今回の公式チュートリアルがどんなものだったかというと、再帰関数の基本的な使い方を示しています。再帰関数は、自信を呼び出すことで、複雑な処理を繰り返し実行することができます。使用する場合は、無限ループが起きることがあるので、終了条件を設定する必要があります。
Discussion