スポンサーリンク

問題の解答・解説ページ

このページは解説の閲覧モードです。
実力試しをしたい方は、下のボタンからクイズに挑戦してください!

この問題をクイズ形式で解く
問題 No.2775
プログラミングにおいて、再帰呼び出しを行う関数を記述する際、関数が自分自身を呼び出すたびに発生するスタックフレームの消費や戻り値の処理遅延を解消するため、コンパイラがその呼び出しを反復構造へと自動的に変換する最適化手法を指す用語はどれか。

【正解の解説】

末尾再帰最適化

これは伝言ゲームで毎回新しい人を呼ぶと部屋がパンクするのを防ぐため、同じ人が一箇所に留まってメモを書き換えるだけで済ませるような工夫です。関数が自分を呼び出す最後の処理(末尾再帰)を、メモリを消費しない普通のループ構造へと自動で変換し、スタックオーバーフローという悲劇を防いでくれます。

スポンサーリンク

【その他の選択肢の解説】

動的計画法最適化

初学者が「難しそうなプログラミングの最適化用語」として混同しやすい罠の選択肢です。動的計画法はアルゴリズムの設計技法そのものであり、コンパイラが勝手にコードの形をループに変換してくれる末尾再帰最適化とは、目的も仕組みも全く異なるアプローチとなります。

メモ化再帰最適化

再帰関数で同じ計算を何度も繰り返す無駄を防ぐテクニックですが、これは関数の呼び出し構造をループに変換する最適化とは異なります。メモリを消費して計算スピードを上げるアプローチであり、スタックフレームの消費を抑える目的で行われる末尾再帰最適化とは本質が違います。

インライン展開最適化

これは関数の中身をそのままコピーして貼り付けることで呼び出しの手間を消す仕組みであり、再帰呼び出しを反復処理に書き換える末尾再帰最適化とは対象とする問題が異なります。インライン展開は小さな関数の高速化によく使われますが、深い再帰のスタックあふれを解決するものではありません。