問題 No.3192
計算機科学のアルゴリズムにおいて、再帰呼び出しの実行状況やローカル変数の退避場所としてコールスタックが果たす役割として、最も適切なものはどれか。
【正解の解説】
関数が呼び出されるたびに戻り番地や変数を順次積み上げ、呼び出しが完了すると最後に追加されたものから順に取り出す仕組み
スタックは、狭い筒の中に本を上へ上へと積み重ねていくようなデータ構造です。最後に積み上げた本を一番最初に取り出す「後入れ先出し(LIFO)」の原則に従います。プログラムの中で関数が次々と呼び出されるとき、もとの場所に戻るための情報をこの仕組みで管理することで、何重もの関数呼び出しから正確に元の場所へ戻ることができます。
スポンサーリンク
【その他の選択肢の解説】
関数が呼び出されるたびに戻り番地や変数を順次積み上げ、呼び出しが完了すると最初に追加されたものから順に取り出す仕組み
スタックと混同しやすいデータ構造としてキューがあります。キューは遊園地のアトラクション待ちの列のように、最初に並んだ人が最初に処理される仕組みです。しかし、プログラムの関数呼び出し管理では「直前に呼び出した関数を真っ先に終わらせて戻る」必要があるため、キューではなくスタックの仕組みが使われます。
関数が呼び出されるたびに関数の実体をメモリ上に複製し、呼び出しが完了した時点で一括して領域を解放する仕組み
メモリ効率を無視して毎回関数を複製しているわけではありません。コールスタックはメモリの一部を効率的に使い回す仕組みであり、変数を新しくコピーして増やすのではなく、現在実行中の場所を示すポインタを動かすことで高速に処理を行っています。不要になった変数は関数が終了した瞬間に自動で破棄されます。
関数が呼び出されるたびに変数のアドレスをハッシュ値に変換して保持し、呼び出しの順序に関わらず高速に検索する仕組み
ハッシュ値を用いた検索は、データベースや連想配列でキーから値を探すときによく使われる高速化の手法です。しかし、関数の呼び出し履歴やローカル変数の管理において、わざわざハッシュ計算をして検索するような複雑なことはせず、単に入り口から順番に積み上げていくだけのシンプルな構造になっています。