NWネットワークスペシャリスト試験 午前Ⅰ
平成29年度秋期 ネットワークスペシャリスト 午前Ⅰ 問3
問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。
問題
選択肢
- アif n=0 then return 0 else return n×fact(n-1)
- イif n=0 then return 0 else return n×fact(n+1)
- ウif n=0 then return 1 else return n×fact(n-1)
- エif n=0 then return 1 else return n×fact(n+1)
解き方のヒントを見る
再帰関数を読む着眼点
定義を読むときは、まず全体を構成する各部分の役割を分けて捉え、同じ観点を保ったまま処理の流れを追いましょう。表面的な語句ではなく、条件と参照先の対応に注目すると整理しやすくなります。
この問題で問われていること
今回の焦点は、定義の中で条件と参照先がどのように対応しているかです。各部分を個別に覚えるのではなく、入力から次の段階へ進む関係を同じ基準で読み取れるか確認してください。
視点
再帰的な定義は、記述を役割ごとに分けて読むと整理しやすくなります。条件と参照先の対応を追い、各段階で同じ読み方が保たれているかを確かめる、一つの視点に絞りましょう。
確認ポイント
- 条件と参照先の対応関係を確認する
- 各段階を同じ基準で追えるか確認する
- 定義全体のつながりを言葉で整理する
正解と解説を見る
正解
ウ
解説
階乗は0の階乗を1とし、正の整数nではnとn−1以下の階乗を掛ける。したがって、基底条件と引数を1ずつ減らす再帰呼出しが必要です。
理由
階乗は0!=1を基底条件とし、nが正のときn!=n×(n−1)!と定義される。例えばfact(3)は3×fact(2)、さらに2×fact(1)、1×fact(0)と展開され、最終的に1を基に計算できる。
比較
正しい再帰定義では、nが0になった時点で処理を終了し、0!の値である1を返す。また、再帰呼出しの引数はn−1として、非負整数の範囲で終了条件へ近づかなければならない。
選択肢ア
これは不正解だよ。再帰呼出しの部分はn×fact(n−1)なので階乗の形に近いが、基底条件でn=0のときに返す値が0になっている。階乗では0!=1であるため、この定義ではfact(0)を誤って計算してしまう。
選択肢イ
これは不正解だよ。n=0のときに0を返す点が階乗の定義と異なるうえ、再帰呼出しもfact(n+1)となっている。nが正のとき引数が大きくなり、0へ近づかないため、通常の再帰計算として終了できない。
選択肢ウ(正解)
これは正解だよ。n=0では0!=1を返し、nが正のときはn×fact(n−1)を計算する。再帰のたびに引数が1ずつ減少して0に到達するため、定義どおり階乗を計算できる。
選択肢エ
これは不正解だよ。n=0のときに1を返す点は0!=1と一致している。しかし、再帰呼出しがfact(n+1)なので、nが正のとき引数は終了条件から遠ざかる。したがって、階乗の再帰計算として適切ではない。
学習のポイント
再帰関数の基底条件と、終了へ向かう引数の変化を理解する。
出典:独立行政法人 情報処理推進機構(IPA)平成29年度秋期 ネットワークスペシャリスト試験 午前Ⅰ 問3(公式資料:問題冊子(PDF) / 解答例)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針