SC情報処理安全確保支援士試験 午前Ⅰ
平成25年度春期 情報処理安全確保支援士 午前Ⅰ 問2
問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。
問題
選択肢
- ア一0 then return 0 else return Xfact(%一1)
- イぁ三0 then return 0O else return zXfact⑦⑫十1)
- ウifヵ一O then return 1 else return zXfact⑦一1)
- エ導ヵ一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による補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針