Go 言語の再帰関数
1. 再帰関数(Recursion Functions)
Go言語は再帰関数をサポートしています。再帰関数とは、関数が自分自身を呼び出し、かつ特定の「停止条件」に達するように設計された関数のことを指します。
以下の例において、testcount() は自分自身を呼び出す関数です。ここでは変数 x をデータとして使用し、再帰するたびに x を1ずつ増加(x + 1)させています。この再帰は、変数 x が 11 になったとき(x == 11)に終了します。
1.1. カウント処理の実装例
package main
import ("fmt")
func testcount(x int) int {
if x == 11 {
return 0 // 停止条件
}
fmt.Println(x)
return testcount(x + 1) // 自分自身を呼び出す(再帰)
}
func main(){
testcount(1)
}実行結果:
1
2
3
4
5
6
7
8
9
102. 再帰の概念と開発上の注意点
再帰は数学およびプログラミングにおいて一般的な概念です。これを利用することで、特定の計算結果に到達するまでデータを反復処理(ループ)させることができるというメリットがあります。
ただし、開発者は再帰関数を扱う際に細心の注意を払う必要があります。なぜなら、終了しない無限ループに陥ったり、メモリやプロセッサの電力を過剰に消費するコードを非常に書きやすいからです。しかし、正しく記述された再帰は、プログラミングにおいて非常に効率的で、数学的にエレガントなアプローチとなります。
3. 階乗(Factorial)計算の実装例
以下の例では、自分自身を呼び出す factorial_recursion() 関数を定義しています。ここでは変数 x をデータとして使用し、再帰するたびに値を1ずつ減少(-1)させています。再帰は、条件が 0 より大きくなくなったとき(すなわち 0 になったとき)に終了します。
3.1. 実装コード
package main
import ("fmt")
func factorial_recursion(x float64) (y float64) {
if x > 0 {
y = x * factorial_recursion(x-1) // 再帰的な計算
} else {
y = 1 // 停止条件:0以下の場合は1を返す
}
return
}
func main() {
fmt.Println(factorial_recursion(4))
}実行結果: 24