再帰は問題の自己相似構造をコードに直接写し取り、意図が明瞭で保守しやすい。
木構造やグラフ、分割統治に固有の「部分問題が同型」という事実を、そのまま呼び出しの再帰に反映できます。これにより、手動スタックやループでの状態管理よりも、コードが問題記述に近づきます。仕様との対応が一対一になりやすく、要件変更時の影響範囲も読み解きやすくなります。帰納的な定義(例:再帰下降パーサ、ファイルシステム走査)をそのままコードに落とせることは大きな利点です。
再帰はベースケースと帰納ステップに分解でき、正しさの議論とレビューが容易になる。
ループでは不変条件の設計・検証が壁になりがちですが、再帰は「最小の問題が正しい」→「一つ大きい問題も正しい」という自然な帰納に乗せられます。これにより境界条件のバグやオフバイワンを減らし、レビューでも論点を局所化できます。単体テストもベースケースと小さな構造に焦点化でき、テスト設計のコストが下がります。スタック使用への懸念には、尾再帰最適化や構造的再帰、必要に応じた明示スタック化で堅実に対処可能です。
再帰は状態を外に漏らさずに計算を記述でき、抽象の再利用と安全性を高める。
明示的なカウンタやミュータブルな蓄積を持たず、入力から出力への写像としてロジックを定義できます。fold/map などの再帰スキームと組み合わせれば、汎用の骨格に処理をはめ込むだけで高い再利用性が得られます。副作用が減ることで並行実行やキャッシュ戦略とも相性がよく、デバッグの負担も軽くなります。反復にも長所はありますが、意図を抽象に昇華するうえで再帰が提供する表現力は一段深いのです。
再帰は独立な部分問題への分割を明示し、並列化とスケーラビリティを実現しやすい。
クイックソートやマージソートのように、問題を半分に割って解き、結果を結合する流れは再帰で自然に表現でき、平均計算量 O(n log n) クラスのアルゴリズムを過不足なく実装できます。各サブタスクは同型かつ独立なので、Fork/Join やワークスティーリングでの並列化に載せやすく、スケールアウトの設計も明確です。反復で同等の性能は出せますが、タスク境界やワーク分割をコード上で明文化しやすいのは再帰の強みです。さらに尾再帰最適化やメモ化などの最適化手法とも親和性が高く、性能・保守の両面で伸びしろがあります。