【さいき】

再帰 とは?

最終更新:
💡 鏡の中にまた鏡がある「自分自身を呼ぶ」仕組み

関数が自分自身を呼び出すプログラミング手法。木構造の探索やフィボナッチ数列など、繰り返し構造を簡潔に表現できる。

📌 このページのポイント
再帰:小さな問題を同じ関数へ 呼び出し ↓ 結果を返す ↑ 階乗(4) 4 × 6 = 24 階乗(3) 3 × 2 = 6 階乗(2) 2 × 1 = 2 階乗(1) = 1 1を返す 1で止まり、4 × 3 × 2 × 1 = 24
0以上の整数の階乗の例。終了条件へ近づく呼び出しを行い、戻った結果で計算します。
ひよこ ひよこ
再帰って何が便利なの?
ペンギン先生 ペンギン先生
繰り返す構造をシンプルに書けるんだ。例えばフォルダの中にフォルダがあって、その中にもまたフォルダが…という構造を処理するとき、再帰を使うとすっきり書ける。
ひよこ ひよこ
うーん、でも自分を呼び続けたら止まらなくなりそう
ペンギン先生 ペンギン先生
処理を終えるには「ベースケース(終了条件)」を決めて、呼ぶたびにそこへ近づけるんだ。例えば0以上の整数の階乗なら、nが0か1で1を返し、それ以外はn−1の階乗を呼ぶよ。終了条件があっても、そこへ近づかなければ止まらないね。
ひよこ ひよこ
ペンギン先生 ペンギン先生
通常の再帰では、途中の処理を覚えておくために呼び出しをスタックに積むよ。深すぎるとエラーやスタックオーバーフローになる。Pythonのように上限を設けてエラーで止める処理系もあるんだ。
ひよこ ひよこ
末尾再帰最適化って何が違うの?
ペンギン先生 ペンギン先生
再帰呼び出しの後に計算が残らない「末尾」の形なら、処理系によっては呼び出し元の領域を再利用できるよ。ただし対応は言語や処理系による。深い再帰を安全に扱いたいときは、対応を確認したりループへ書き直したりするんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
再帰って出てきたら「関数が自分自身を呼んで繰り返す」と思えばだいたいOK!
📖 おまけ:英語の意味
「Recursion」 = 再帰・繰り返し戻ること
💬 Recursionは「再帰」を表す英語で、プログラミングでは自分自身を呼ぶ仕組みを指すよ。

参考資料

← 用語集にもどる