平成25年・秋期
広告
チーモンさん
(No.1)
平成25年・秋期の問8
再帰的に定義された手順Procで、....
という問題ですが、回答は「イ」となっています。
イ;5432112345
値を代入しながらトレースした際、「543211」までは理解できたのですが、なぜ回答にある通り、その後「2345」と印字される数字が上がって行くのでしょうか?
再帰的に定義された手順Procで、....
という問題ですが、回答は「イ」となっています。
イ;5432112345
値を代入しながらトレースした際、「543211」までは理解できたのですが、なぜ回答にある通り、その後「2345」と印字される数字が上がって行くのでしょうか?
2014.03.26 23:00
名無しさん
(No.2)
以下のような処理手順になります
proc(5)
0でない
5を印字
proc(4)
0でない
4を印字
proc(3)
0でない
3を印字
proc(2)
0でない
2を印字
proc(1)
0でない
1を印字
proc(0)
0であるから戻る
1を印字
proc(1)終了
2を印字
proc(2)終了
3を印字
proc(3)終了
4を印字
proc(4)終了
5を印字
proc(5)終了
よって印字される数字は
「5432112345」です
質問者さんは問題文の
proc(n)
n=0 ならば戻る
そうでなければ
{
nを印字する
proc(n-1)を呼び出す
nを印字する ←ココ
}
を実行して戻る
矢印部分を、proc(1)終了の次から考え忘れているため「543211」でとまってしまったのでしょう
proc(5)
0でない
5を印字
proc(4)
0でない
4を印字
proc(3)
0でない
3を印字
proc(2)
0でない
2を印字
proc(1)
0でない
1を印字
proc(0)
0であるから戻る
1を印字
proc(1)終了
2を印字
proc(2)終了
3を印字
proc(3)終了
4を印字
proc(4)終了
5を印字
proc(5)終了
よって印字される数字は
「5432112345」です
質問者さんは問題文の
proc(n)
n=0 ならば戻る
そうでなければ
{
nを印字する
proc(n-1)を呼び出す
nを印字する ←ココ
}
を実行して戻る
矢印部分を、proc(1)終了の次から考え忘れているため「543211」でとまってしまったのでしょう
2014.03.27 01:30
チーモンさん
(No.3)
ご回答ありがとうございます。
ご指摘頂いた矢印部分というのが、「543211」の最後に「11」となるポイントだと思っています。
ただ、なぜ「proc(1)終了の次」がproc(2)、次がproc(3)…という感じで、nの値が大きくなって行くのだろうか?という箇所がよくわかりません。
すみません。
ご指摘頂いた矢印部分というのが、「543211」の最後に「11」となるポイントだと思っています。
ただ、なぜ「proc(1)終了の次」がproc(2)、次がproc(3)…という感じで、nの値が大きくなって行くのだろうか?という箇所がよくわかりません。
すみません。
2014.03.27 21:36
イクメンさん
(No.4)
例えば,proc(5)で,5は2回印字されます。
2回印字の間で,proc(4)が呼び出されます。
「間」で呼び出されているからです。
proc(5)
{
5を印字する
proc(5-1)を呼び出す
5を印字する
}
2回印字の間で,proc(4)が呼び出されます。
「間」で呼び出されているからです。
proc(5)
{
5を印字する
proc(5-1)を呼び出す
5を印字する
}
2014.03.27 23:23
チーモンさん
(No.5)
ありがとうございました。
ようやく理解できました。
回答を頂いた方々に感謝致します。
ようやく理解できました。
回答を頂いた方々に感謝致します。
2014.03.28 01:50
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。