応用情報技術者試験 平成30年春 午前問8 解説付き過去問
問題
再帰的な処理を実現するためには、再帰的に呼び出したときのレジスタ及びメモリの内容を保存しておく必要がある。
そのための記憶管理方式はどれか。
そのための記憶管理方式はどれか。
正解
解説
この問題は、再帰的な処理を実装する上でのメモリ管理方式について問うものです。再帰処理では、関数が自身を呼び出すたびに前の状態を保存する必要があります。
- 再帰的な処理の特性
再帰処理では、ある関数が自身を呼び出すことによって、その実行中の変数やパラメータなどの状態が保持されなければなりません。このため、現在の関数の状態を保持するスタックフレームがメモリに積み上げられ、関数が終了するとそのスタックフレームが取り除かれます。 - メモリ管理方式:LIFO(Last In, First Out)
LIFO方式では、最後に追加されたデータが最初に取り出される「後入れ先出し」の原則を持っています。これは再帰処理の際に、最後に呼び出された関数から順に処理を戻していくことが必要なため、非常に適しています。各関数呼び出し時の状態はスタックに保存され、関数が終了するとそのスタックから状態が取り出されます。 - 他の選択肢との比較
FIFO(First In, First Out)、LFU(Least Frequently Used)、およびLRU(Least Recently Used)は、再帰処理とは合致しないメモリ管理方式です。これらは他の状況、例えばキャッシュの管理やページングで利用されることが一般的です。
したがって、再帰的な処理において状態を適切に管理するためにはLIFO方式が最も適しています。