<C言語>再帰関数
今回の記事でわかること
- 再帰関数とは何かが分かる
- 再帰の使いどころが分かる
- 実際のコード例が理解できる
再帰関数とは
再帰関数とは「自分自身を呼び出す関数」のことです
例えば数学で「階乗(n!)」を計算するとき
n! = n × (n-1)!
という形で「同じ形の式が繰り返し出てくる」と思います。こういう処理をプログラムで書くときに再帰関数が活躍します
基本構造
再帰関数には大きな特徴が2つあります
- 自分自身を呼び出す処理がある
- 終了条件(ベースケース)が必ず必要
これを守らないと、無限ループになってプログラムが止まらなくなります
サンプル:階乗の計算
#include <stdio.h>
// 再帰関数の定義
int factorial(int n) {
if (n == 0) { // 終了条件
return 1;
} else {
return n * factorial(n - 1); // 自分自身を呼び出す
}
}
int main(void) {
int num = 5;
int result = factorial(num);
printf("%d! = %d\n", num, result);
return 0;
}
/* 出力結果
5! = 120
*/
処理の流れ
- factorial(5) → 5 × factorial(4)
- factorial(4) → 4 × factorial(3)
- factorial(3) → 3 × factorial(2)
- factorial(2) → 2 × factorial(1)
- factorial(1) → 1 × factorial(0)
- factorial(0) → 1(終了条件!)
ここでようやく答えが返り、積み重なって最終的に 120 が計算されます
使いどころと注意点
使いどころ
- 数学的な計算(階乗、フィボナッチ数列など)
- 木構造やグラフ探索(ディレクトリ構造の探索など)
- 分割して解く処理(ソートアルゴリズムの一部)
注意点
- 終了条件を必ず書く(書かないと無限ループ)
- 呼び出しが深すぎるとスタックオーバーフロー が起きる
- 簡単な繰り返し処理なら for / while の方が効率が良い