平成31年春期試験午前問題  問6

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
さん
(No.1)
なぜ答えは[1,2,3,1,2,3, 3, 2, 1]にならないのでしょうか?
答えはBに6個しか入っていませんが、まだCに3つ残っています。

また、解説を見ると「呼び出し3回目の続き」と途中に書いてありますが、これは何故このタイミングで続きをしているのですか?
2020.05.13 00:16
guestさん
(No.2)
※問題文中の「Aからpopした値をCにpushする。」を面倒なので「A→C」と書きます。

> 答えはBに6個しか入っていませんが、まだCに3つ残っています。
「Cが空になるまで」とはどこにも書いていません。

> 「呼び出し3回目の続き」と途中に書いてありますが、これは何故このタイミングで続きをしているのですか?
f()の途中に「f()を呼び出す。」とありますよね?
つまり、、、
f()は、「A→C」を実行後に「f()」を実行します。そして
f()は、「f()」を実行後に「C→B」を実行するのです。
重要なことなので2回言います。
f()は、「f()」を実行後に「C→B」を実行するのです。
念のためもう一度。
f()は、「f()」を実行後に「C→B」を実行するのです。

・・・・。
f()に呼び出されたf()を、区別のためf2()とでも呼びます。
f()はf2()を呼び出しましたが、呼び出しただけです。まだ「C→B」に行ってはいけません。
f()は、「f2()」を実行後に「C→B」を実行するのです。
念のためもう一d(殴

f2()が呼び出されました。f2()も例によって「そうでない場合{・・・}」に到達します。
「A→C」実行後「f3()」を実行します。
「f3()」実行後「C→B」を実行します。

どうでしょう。わかってきましたでしょうか?
この時点でf()も、f2()もまだ完了していません。
f3()完了後でないとf2()は完了できないし、
f2()完了後でないとf()は完了できません。

指が疲れてきたのでここらで一度、これをヒントにもう一度、解説を読んでみてください。
2020.05.13 09:55
さん
(No.3)
わかりやすい解説で助かりました。またよろしくお願いします。
2020.05.14 17:22

返信投稿用フォーム

スパム防止のために初投稿日から2カ月以上経過したスレッドへの書き込みは禁止しています。

その他のスレッド


Pagetop