🦽

Go言語で再帰関数を使う

2023/07/13に公開

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))
}

まとめ

今回の公式チュートリアルがどんなものだったかというと、再帰関数の基本的な使い方を示しています。再帰関数は、自信を呼び出すことで、複雑な処理を繰り返し実行することができます。使用する場合は、無限ループが起きることがあるので、終了条件を設定する必要があります。

Jboy王国メディア

Discussion