AUシステム監査技術者試験 午前Ⅰ

平成30年度春期 システム監査技術者 午前Ⅰ 問2

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

非負の整数m,nに対して次のとおりに定義された関数Ack(m,n)がある。Ack(1,3)の値はどれか。 Ack(m,n) = ⎧ Ack(m−1,Ack(m,n−1)) (m>0かつn>0のとき) ⎨ Ack(m−1,1)       (m>0かつn=0のとき) ⎩ n+1          (m=0のとき)
公式問題冊子の問2(図や選択肢を含む)
公式問題冊子の問2(図や選択肢を含む)

選択肢

  1. ア
    3
  2. イ
    4
  3. ウ
    5
  4. エ
    6
解き方のヒントを見る

再帰呼出しと引数の評価

条件分岐と、入れ子の呼出しで値が受け渡される順序を確認できますか?

この問題で問われていること

呼出しスタックを調べ、引数に関数呼出しを含む場合の計算過程を、小さな例で図にできますか?

再帰呼出しと引数の評価

呼出しスタックを調べ、引数に関数呼出しを含む場合の計算過程を、小さな例で図にできますか?

確認ポイント

  • f(g(x))を例に、gの戻り値がfの引数に渡される過程を追えますか?
  • 各呼出しの引数を表に記録し、ゼロか正かによって、どの条件が成立するか確認できますか?
  • 呼出し時と戻る時を分けて記録し、まだ値が決まっていない計算と、確定した戻り値を区別できますか?
正解と解説を見る

正解

ウ

解説

添付の公式解答表では,問2の正解はウ。定義より,Ack(0,n)=n+1です。まずAck(1,0)=Ack(0,1)=2。n>0ではAck(1,n)=Ack(0,Ack(1,n−1))=Ack(1,n−1)+1となるので,Ack(1,1)=3,Ack(1,2)=4,Ack(1,3)=5と求められる。

添付の公式解答表では,問2の正解はウ。定義より,Ack(0,n)=n+1です。まずAck(1,0)=Ack(0,1)=2。n>0ではAck(1,n)=Ack(0,Ack(1,n−1))=Ack(1,n−1)+1となるので,Ack(1,1)=3,Ack(1,2)=4,Ack(1,3)=5と求められる。

選択肢ア

誤り。3はAck(1,1)の値であり,Ack(1,3)の値ではない。

選択肢イ

誤り。4はAck(1,2)の値であり,Ack(1,3)を求めるにはさらに再帰式を適用する必要がある。

選択肢ウ(正解)

正しい。Ack(1,0)=2から順に計算すると,Ack(1,1)=3,Ack(1,2)=4,Ack(1,3)=5となる。

選択肢エ

誤り。6はAck(1,4)の値であり,指定されたAck(1,3)より再帰式を1回多く適用した値である。

学習のポイント

呼出しスタックを調べ、引数に関数呼出しを含む場合の計算過程を、小さな例で図にできますか?

出典:独立行政法人 情報処理推進機構(IPA)平成30年度春期 システム監査技術者試験 午前Ⅰ 問2(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針