HOME»応用情報技術者試験掲示板»平成25年秋期 午前問8
投稿する

[3415] 平成25年秋期 午前問8

 アルゴリズム苦手さん(No.1) 
proc(n)
  n=0 ならば戻る
  そうでなければ
  {
A    nを印字する
B    proc(n−1)を呼び出す
C    nを印字する
  }
  を実行して戻る

基礎的な内容で申し訳ありません。ABCと行に番号をつけました。
n=5にし、ループして、n=0になった後、【n=0 ならば戻る】の【戻る】という表記の意味が分かりません。
解説を見るとproc(1)からproc(5)まで戻っていますのでprocを戻るのかと思うのですが。どこの文にnを1ずつ増やしていくと書いてあるのでしょうか。
また、proc(0)からproc(1)に戻った場合、Aで1を印字し、Bでproc(0)に戻りn=0なので、またproc(1)に戻って、Aで1を印字しと5,4,3,2,1,1,1,1,…とならないのでしょうか。
2022.05.17 10:03
nsさん(No.2) 
AP ブロンズマイスター
「戻る」というのはプログラミング言語での"return"にあたります。呼び出し元に戻って続きの処理を実行します。
Bの行でproc(n)からproc(n-1)を呼び出し、proc(n-1)の中で「戻る」とあった場合は、proc(n)に戻ってCの行を実行します。

proc(2)の例を書いてみます。
proc(2)
  n=0ではない
  (A)"2"を印字
  (B)proc(1)を呼び出し
    proc(1)
      n=0ではない
      (A)"1"を印字
      (B)proc(0)を呼び出し
        proc(0)
        n=0なので、戻る
      (C)"1"を印字
      proc(1)を終了して戻る
  (C)"2"を印字
  proc(2)を終了して戻る
2022.05.17 11:35
 アルゴリズム苦手さん(No.3) 
早速ご回答いただきまして、本当にありがとうございます!!!しかも分かりやすい言葉で。
まだ少し分からない部分がありまして。。
n=0ではない
      (A)"1"を印字
      (B)proc(0)を呼び出し
        proc(0)
        n=0なので、戻る
→ここではA  Bに行っていないのは、既に実行済みと考えて飛ばして、Cに行っていると言うことでしょうか。
      (C)"1"を印字
      proc(1)を終了して戻る
  (C)"2"を印字
  proc(2)を終了して戻る
2022.05.17 11:57
y4 kさん(No.4) 
この投稿は投稿者により削除されました。(2022.05.17 13:45)
2022.05.17 13:45
y4 kさん(No.5) 
アルゴリズム苦手さん
nsさんの示した例は、以下のようなイメージになります。

1 proc(2) 呼び出し
2  proc(1) 呼び出し
3    proc(0) 呼び出し・終了
4  proc(1) 終了
5 proc(2) 終了

1 proc(2)の処理内で A(1-A)を実行します。
2 1-Bとしてproc(1)を呼び出し、その処理内でA(2-A)を実行します。
3 2-Bとしてproc(0)を呼び出し、終了まで実行します
4 2-Cを実行して、proc(1)を終了します。
5 1-Cを実行して、proc(2)を終了します。

これでイメージが湧いたでしょうか?
2022.05.17 13:46
 アルゴリズム苦手さん(No.6) 
分かりました!!!
1-5のところ、スペースでずらして分かりやすくしていただきありがとうございます!
prosをどんどん展開していって、0になったら【戻って】いるんですね!
理解できました!!
お二人とも、分かりやすく説明していただいてありがとうございました!!!!
2022.05.17 14:36

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。
© 2010-2024 応用情報技術者試験ドットコム All Rights Reserved.

Pagetop