基本情報平成31年春期午前6のトレース内容について
idriveさん
(No.1)
トレース内容について(f()呼び出し4回目)までのトレースの内容は理解できたのですが
この処理以降の(f()呼び出し3回目の続き)以降の処理が理解できていません。
何故これ以降の関数の呼び出しの回数が3回、2回、1回となるのでしょうか
トレース内容について(f()呼び出し4回目)が終了した後は
Cからpopした値をBにpushするを1回実施後はf()Aが空ならば何もしないで抜ける
と思っているのですが
ご教授いただけますでしょうか
お願いいたします。
この処理以降の(f()呼び出し3回目の続き)以降の処理が理解できていません。
何故これ以降の関数の呼び出しの回数が3回、2回、1回となるのでしょうか
トレース内容について(f()呼び出し4回目)が終了した後は
Cからpopした値をBにpushするを1回実施後はf()Aが空ならば何もしないで抜ける
と思っているのですが
ご教授いただけますでしょうか
お願いいたします。
2024.06.05 17:26
boyonboyonさん
★FE シルバーマイスター
(No.2)
f()だけだとわかりにくいので、番号を付けます。
①から⑩の順に実行されます。
f1(){
Aが、空ならば何もしない。
}
そうでない場合{
Aからpopした値をCにpushする ①A{1,2} B{1,2,3} C{1,2,3,3}
f2()を呼び出す ②を実行 ⑨
Cからpopした値をBにpushする ⑩A{} B{1,2,3,1,2,3} C{1,2,3}
}
}・・・⑩を実行したので、f1()終了
f2(){
Aが、空ならば何もしない。
}
そうでない場合{
Aからpopした値をCにpushする ②A{1} B{1,2,3} C{1,2,3,3,2}
f3()を呼び出す ③を実行 ⑦
Cからpopした値をBにpushする ⑧A{} B{1,2,3,1,2} C{1,2,3,3}
}
}・・⑧を実行したので、f2()終了→⑨の次の行へ
f3(){
Aが、空ならば何もしない。
}
そうでない場合{
Aからpopした値をCにpushする ③A{} B{1,2,3} C{1,2,3,3,2,1}
f4()を呼び出す ④を実行 ⑤
Cからpopした値をBにpushする ⑥A{} B{1,2,3,1} C{1,2,3,3,2}
}
}・・ ⑥を実行したので、f3()終了→⑦の次の行へ
f4(){
Aが、空ならば何もしない。 ④
}
そうでない場合{・・・ここは実行されません。
Aからpopした値をCにpushする
f5()を呼び出す
Cからpopした値をBにpushする
}
}・・④を実行して、f4()終了→⑤の次の行へ
①から⑩の順に実行されます。
f1(){
Aが、空ならば何もしない。
}
そうでない場合{
Aからpopした値をCにpushする ①A{1,2} B{1,2,3} C{1,2,3,3}
f2()を呼び出す ②を実行 ⑨
Cからpopした値をBにpushする ⑩A{} B{1,2,3,1,2,3} C{1,2,3}
}
}・・・⑩を実行したので、f1()終了
f2(){
Aが、空ならば何もしない。
}
そうでない場合{
Aからpopした値をCにpushする ②A{1} B{1,2,3} C{1,2,3,3,2}
f3()を呼び出す ③を実行 ⑦
Cからpopした値をBにpushする ⑧A{} B{1,2,3,1,2} C{1,2,3,3}
}
}・・⑧を実行したので、f2()終了→⑨の次の行へ
f3(){
Aが、空ならば何もしない。
}
そうでない場合{
Aからpopした値をCにpushする ③A{} B{1,2,3} C{1,2,3,3,2,1}
f4()を呼び出す ④を実行 ⑤
Cからpopした値をBにpushする ⑥A{} B{1,2,3,1} C{1,2,3,3,2}
}
}・・ ⑥を実行したので、f3()終了→⑦の次の行へ
f4(){
Aが、空ならば何もしない。 ④
}
そうでない場合{・・・ここは実行されません。
Aからpopした値をCにpushする
f5()を呼び出す
Cからpopした値をBにpushする
}
}・・④を実行して、f4()終了→⑤の次の行へ
2024.06.05 19:31
idriveさん
(No.3)
boyonboyonさん
再帰関数を認識をせずトレースをしていました。
ありがとうございました。
再帰関数を認識をせずトレースをしていました。
ありがとうございました。
2024.06.06 00:14
広告
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
広告