HOME»基本情報技術者試験掲示板»再帰処理について
投稿する

再帰処理について [5800]

 でんのすけさん(No.1) 
科目B試験範囲である再帰処理の理解に苦しんでいます。
範囲のため応用情報にも出題されている内容を解いているのですが、いまいち理解が出来ません。下記問題内容です。
(応用情報技術者試験平成25年度秋午前8問改題より抜粋)
問:再帰的に定義された手続procで、proc(5)を実行したとき、印字される数字の順番を並べたものはどれか
[プログラム]
1:〇:proc(整数型:n)
2:  if(nが0と等しい)
3:    return
4:     else
5:       nを印字する
6:    proc(n-1)
7:       nを印字する
8:  endif
上記になります。
出力として、5432112345が正解だそうですが、なぜ一度n=0になったのにproc(1)が呼び出されるのか分かりません。3行目のreturnで値が減っていたのを戻しているのでしょうか?どうか分かりやすくご教授いただけたら幸いです。
よろしくお願いします。
2025.02.16 15:32
y4 kさん(No.2) 
FE ブロンズマイスター
整数型の引数nが0の時にそのままreturnしますが,
それ以外では以下の処理です

~~~ここから~~~
nを印字
proc(n-1)の実行
nを印字
~~~ここまで~~~

なので、proc(5)では以下の様に動作します。
proc(5)の開始
  5を印字する
  proc(4)の開始
    4を印字する
    proc(3)の開始
      3を印字する
      proc(2)の開始
        2を印字する
        proc(1)の開始
          1を印字する
          proc(0)の開始・終了
          1を印字する
        proc(1)の終了
        2を印字する
      proc(2)の終了
      3を印字する
    proc(3)の終了
    4を印字する
  proc(4)の終了
  5を印字する
proc(5)の終了

結果印字されるのは
5→4→3→2→1→1→2→3→4→5
2025.02.16 16:27
QMさん(No.3) 
FE ゴールドマイスター
応用情報の問題なら応用情報のサイトで訊く方がいいような気もしますが。

一つのprocが何をするのか、大枠を把握しましょう。
メインとなるのは5~7行目。

proc(5)なら、
5を印字する
proc(4)の結果がここに入る
5を印字する
です。
だから出力の最初と最後が5。

proc(0)の後にproc(1)が呼び出されているのではなく、
proc(1)が1を2つ出力しています。
2025.02.16 16:31
jjon-comさん(No.4) 
FE プラチナマイスター
再帰を自分自身の呼び出しと考えず、同じ処理をおこなう別人の呼び出しと考えてみてはどうでしょう。

proc(5)の実行を指示されたAさんは、
(A1) まず5を印字して
(A2) Bさんにproc(4)の実行を指示して、処理の終了を待ち、
(A3) (Bさんの処理が終わった後で)5を印字します

proc(4)の実行を指示されたBさんは、
(B1) まず4を印字して
(B2) Cさんにproc(3)の実行を指示して、処理の終了を待ち、
(B3) (Cさんの処理が終わった後で)4を印字します

proc(3)の実行を指示されたCさんは、
(C1) まず3を印字して
(C2) Dさんにproc(2)の実行を指示して、処理の終了を待ち、
(C3) (Dさんの処理が終わった後で)3を印字します

proc(2)の実行を指示されたDさんは、
(D1) まず2を印字して
(D2) Eさんにproc(1)の実行を指示して、処理の終了を待ち、
(D3) (Eさんの処理が終わった後で)2を印字します

proc(1)の実行を指示されたEさんは、
(E1) まず1を印字して
(E2) Fさんにproc(0)の実行を指示して、処理の終了を待ち、
(E3) (Fさんの処理が終わった後で)1を印字します

proc(0)の実行を指示されたFさんは、
(F1) 引数が0と等しいのでただ処理を終了します(return)

このA,B,C,D,E,Fの6人が連携した処理の流れは全体として次のようになります。
(A1)(A2)→(B1)(B2)→(C1)(C2)→(D1)(D2)→(E1)(E2)→(F1)→(E3)→(D3)→(C3)→(B3)→(A3)
2025.02.16 16:43
 でんのすけさん(No.5) 
3名の方々回答ありがとうございました!
最初の再帰では6行目でn-1しているので減っていきましたが、n=0で帰ってくるときは7行目に帰ってくるので増えていくということですね!
ありがとうございました!
2025.02.17 19:58
返信投稿用フォーム
お名前
顔アイコン

本文(コミュニティガイドライン⇱を順守して適切な投稿を心がけましょう)
🔐投稿削除用のパスワード(任意)
投稿プレビュー
※CBT試験では出題内容の公開が禁止されているため、直接的・間接的を問わず、出題内容や難易度を尋ねる質問は厳禁です。
※宣伝や迷惑行為を防止するため、当サイト、姉妹サイト、IPAサイト以外のURLを含む文章の投稿はできません。
投稿記事削除用フォーム
投稿No. パスワード 
© 2010- 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop