平成25年・秋期

チーモンさん  
(No.1)
平成25年・秋期の問8
再帰的に定義された手順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」でとまってしまったのでしょう
2014.03.27 01:30
チーモンさん  
(No.3)
ご回答ありがとうございます。
ご指摘頂いた矢印部分というのが、「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を印字する
  }
2014.03.27 23:23
チーモンさん 
(No.5)
ありがとうございました。
ようやく理解できました。

回答を頂いた方々に感謝致します。
2014.03.28 01:50

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop