【さいき】
再帰 とは?
💡 鏡の中にまた鏡がある「自分自身を呼ぶ」仕組み
📌 このページのポイント
再帰って何が便利なの?
うーん、でも自分を呼び続けたら止まらなくなりそう
そう、だから「ベースケース」が必須なんだ。「ここで止める」という条件を必ず書く。例えばフィボナッチ数列なら「n が 0 か 1 なら n を返す」という終了条件を最初に書く。
スタックオーバーフローって何?
再帰呼び出しは毎回スタックに積まれるんだ。深く呼び続けるとメモリが足りなくなって強制終了する。それがスタックオーバーフロー。深い再帰が必要なときは「末尾再帰最適化」という技法や、ループへの書き直しを検討する。
末尾再帰最適化って何が違うの?
関数の最後の操作が再帰呼び出しだけのとき、一部の言語はスタックを積まずに同じフレームを使い回す最適化ができる。JavaScriptは仕様上サポートしているけど実装している処理系はほぼなくて、Haskellや関数型言語では当たり前に機能する。「末尾」に再帰が来るかどうかで、スタック消費がまったく変わってくるんだ。
まとめ:ざっくりこれだけ覚えればOK!
再帰って出てきたら「関数が自分自身を呼んで繰り返す」と思えばだいたいOK!
📖 おまけ:英語の意味
「Recursion」 = 再帰・繰り返し戻ること
💬 ラテン語の「recurrere(再び走る)」が語源。プログラミングでは「自分自身を再び呼ぶ」という意味で使われる