SC情報処理安全確保支援士試験 午前Ⅰ
平成29年度秋期 情報処理安全確保支援士 午前Ⅰ 問3
問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。
問題
選択肢
- アヵ三0 then return O else returnヵXfact⑰⑫一1)
- イ下ヵ三0 then return 0O else returnヵXfact(⑫十1)
- ウヵ三0 then return 1 else return zXfact(%一1)
- エ下ヵ三0 then return 1 else return zXfact⑰十1) 8
解き方のヒントを見る
午前I 問03:再帰は「小さくしてもう一回」と「ここで終わり」がセットだよ
再帰は、自分と同じ処理を少し小さな問題にして呼び出していく考え方だよ。たとえば箱を開けたらまた小さい箱が入っているようなイメージ。ただし、いつかは最後の箱にたどり着いて終わらないと、ずっと開け続けることになる。だから再帰では、必ず止まるための条件、つまり基底条件を用意しよう。
この問題で問われていること
再帰呼出しで引数がどう小さくなっていくか、そしてどの条件で処理が止まるかを正しく読み取れるかがポイントだよ。
Recursive Factorial
factorial recursion uses a base case and multiplies n by factorial of n-1
base case: n=0 or 1\nrecursive case: n * fact(n-1)
確認ポイント
- 停止条件がないと無限再帰になる。
- 加算ではなく乗算で定義する。
- `n * fact(n-1)` 型を押さえる。
正解と解説を見る
正解
ウ
出典
問題文と解答は IPA 公開の過去問題冊子・解答例を基にしています。
選択肢ア
これは不正解だよ。n-1で0に近づくところは良いけど、n=0のとき0を返すのが間違いだよ。最後に0を返すと、4×3×2×1×0のように全部が0になってしまうんだ。積み木を最後まで積んだのに、土台を0にして全部消してしまう感じだよ。
選択肢イ
これは不正解だよ。階乗は0!を1として止める必要があるのに、0のとき0を返してしまうんだ。料理のレシピで最後に「仕上げの材料は1個」と置くべきところを0個にする感じで、全部に0を掛けて結果が0になっちゃうよ。しかもn+1に進むので、0に近づかず終わらないのもダメだよ。
選択肢ウ(正解)
これは正解だよ。階乗はn×(n-1)×(n-2)…と1ずつ小さくしていき、n=0になったら1を返して止めるんだ。階段を1段ずつ降りて、地面に着いたら「ここで終了」とするイメージだよ。例えばfact(4)なら4×3×2×1×1=24になって、ちゃんと4!になるよ。
選択肢エ
これは不正解だよ。0のとき1を返すところは合っているけど、再帰呼出しがfact(n+1)なので、数字がどんどん大きくなって0に近づかないんだ。窓口に行きたいのに、毎回反対方向へ歩いていくようなもので、いつまでたっても終点に着けないよ。
出典:独立行政法人 情報処理推進機構(IPA)平成29年度秋期 情報処理安全確保支援士試験 午前Ⅰ 問3(公式資料:問題冊子(PDF) / 解答例)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針