平成27年度 春期 午前 問7
アルゴリズム
スタックに関する問題
プログラムの実行に関する次の記述の下線部 a〜d のうち,いずれかに誤りがある。誤りの箇所と正しい字句の適切な組合せはどれか。
自分自身を呼び出すことができるプログラムは,a 再帰的 であるという。このようなプログラムを実行するときは,b スタック に局所変数,c 仮引数 及び戻り番地を格納して呼び出し,復帰するときは d FIFO(First In First Out) 方式で格納したデータを取り出して復元する必要がある。
| 誤りの箇所 | 正しい字句 | |
|---|---|---|
| ア | a | 再入可能 |
| イ | b | 待ち行列 |
| ウ | c | 実引数 |
| エ | d | LIFO(Last In First Out) |
- アa 再入可能
- イb 待ち行列
- ウc 実引数
- エd LIFO(Last In First Out)
答えと解説を見る
✓ これが正解エd LIFO(Last In First Out)
解説
スタックは後に入れたものから先に取り出します。
設問は、四か所ある下線部のうち一か所だけが誤っているとして、その場所と正しい字句の組合せを選ばせています。ですから、四か所を一つずつ真偽で当てていくのが早道です。自分自身を呼び出せるという性質を再帰的と呼ぶのは合っています。呼出しのたびに積み、復帰のたびに降ろす入れ物がスタックであることも合っています。呼ばれた側が受け取る名前を仮引数と呼ぶのも合っています。残る一か所、取り出す方式を述べたところだけが誤りです。ある関数が自分を三回呼んだとすると、積む順は一回目、二回目、三回目で、戻る順はその逆の三回目、二回目、一回目になります。つまり、後に入れたものを先に出す LIFO の方式です。先に入れたものを先に出す方式では、呼出しの入れ子が壊れてしまいます。よって、誤りは取り出す方式の箇所で、正しい字句は後入れ先出しの方式になります。
ほかの選択肢はなぜ違うのか
- アa 再入可能:再入可能は、複数の処理から同時に呼ばれても正しく動くという別の性質を指す用語です。自分自身を呼び出せるかどうかとは話が違うため、この箇所を書き換える理由がありません。
- イb 待ち行列:待ち行列に替えると、最後の箇所にある先入れ先出しと辻褄は合います。しかし待ち行列では先に入れたものから出てくるため、後に呼んだ側から順に戻ることができず、再帰の呼出しと復帰が成り立ちません。
- ウc 実引数:実引数は、呼ぶ側が渡す値を指す語です。積まれるのは呼ばれた側が受け取る領域なので、もとの字句のままで正しく、ここを書き換えると意味がかえって食い違います。
出典:平成27年度 春期 応用情報技術者試験 午前 問7
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)