SC情報処理安全確保支援士試験 午前Ⅰ

平成25年度春期 情報処理安全確保支援士 午前Ⅰ 問2

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

問題

fact⑭) は、 非負の整数ヵに対してヵの階乗を返す。fact ⑰) の再帰的な定義はどれか。

選択肢

  1. ア
    一0 then return 0 else return Xfact(%一1)
  2. イ
    ぁ三0 then return 0O else return zXfact⑦⑫十1)
  3. ウ
    ifヵ一O then return 1 else return zXfact⑦一1)
  4. エ
    導ヵ一0 then return 1 else return zXfact⑫十1) ーぎ一
解き方のヒントを見る

午前I 問02:再帰は「終わりの合図」があるかを見よう

再帰は、自分で自分を呼び出す処理だよ。たとえば、階段を1段ずつ下りるときに「地面に着いたら終わり」という決まりがないと、ずっと下り続けようとしてしまうよね。だから再帰には、処理を止めるための基底条件と、次の処理へ進む再帰呼出しの両方が必要なんだ。

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

再帰定義を読むときに、「どこで止まるのか」と「どうやって自分自身を呼び出しているのか」を正しく見分けられるかがポイントだよ。

Recursive Factorial

a recursive factorial function uses a base case and returns n times the factorial of n-1

base case\nrecursive case n * f(n-1)

確認ポイント

  • 停止条件が必要です。
  • 乗算で階乗を作る。
  • 再帰呼出しの形を押さえる。
正解と解説を見る

正解

ウ

出典

問題文と解答は IPA 公開の過去問題冊子・解答例を基にしています。

選択肢ア

これは不正解だよ。n * fact(n-1)で小さくしていく形は合っているけど、n=0のとき0を返すのが間違いだよ。例えば1!は1×fact(0)になるけど、fact(0)が0だと答えが0になってしまうよ。階乗では0!は1、と覚えよう。

選択肢イ

これは不正解だよ。階乗では0!は1なのに、ここではn=0のとき0を返しているのがまず違うよ。さらにn+1に進むので、階段を降りて終わりに向かうべきところを、上の階へどんどん登ってしまう感じで、計算が終わらないよ。

選択肢ウ(正解)

これが正解だよ。0!は1なので、n=0になったら1を返すのが正しいよ。あとはn * fact(n-1)で、5!なら5×4!、4!なら4×3!…というふうに、玉ねぎの皮を1枚ずつむくみたいに小さくしていけるから、最後にきちんと止まれるよ。

選択肢エ

これは不正解だよ。n=0のとき1を返す部分は合っているけど、else側がfact(n+1)になっているのがダメだよ。ゴールの0に近づくどころか遠ざかるので、家に帰りたいのに反対方向の電車に乗るようなものだよ。

出典:独立行政法人 情報処理推進機構(IPA)平成25年度春期 情報処理安全確保支援士試験 午前Ⅰ 問2(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

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