応用情報技術者 2013年 春期 午前2 問06
問題文
は、非負の整数に対しての階乗を返す。の再帰的な定義はどれか。
選択肢
ア: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)
の再帰的定義【午前2 解説】
要点まとめ
- 結論:はのとき1を返し、それ以外はと定義するのが正しいです。
- 根拠:階乗の定義はであり、という再帰関係に基づきます。
- 差がつくポイント:ベースケースの値設定と再帰呼び出しの引数の減少が正確であることが重要です。
正解の理由
選択肢ウは、のときにを返し、それ以外はとしています。これは階乗の基本定義に忠実で、再帰の終了条件(ベースケース)と再帰呼び出しの引数の減少が正しく設計されています。これにより、は正しく計算されます。
よくある誤解
- をと誤認し、ベースケースで0を返す選択肢を選ぶことがあります。
- 再帰呼び出しの引数を増やす()と無限ループになるため誤りです。
解法ステップ
- 階乗の定義を確認する:、
- ベースケースを設定する:のとき1を返す
- 再帰呼び出しの引数が減少することを確認する
- 選択肢の中でこれらを満たすものを選ぶ
選択肢別の誤答解説
- ア:のとき0を返すため誤り。は1です。
- イ:のとき0を返し、再帰呼び出しがで増加し無限ループの恐れあり。
- ウ:正解。で、再帰呼び出しも正しい。
- エ:のとき1を返すが、再帰呼び出しがで増加し無限ループになる。
補足コラム
階乗は数学的にで定義され、は組合せ論や確率論で重要な基準値です。再帰関数では必ずベースケースを設け、引数が減少することで計算が終了します。これを怠るとスタックオーバーフローや無限ループになります。
FAQ
Q: なぜは1なのですか?
A: 空の積の定義により、は1と定められ、組合せ計算の整合性を保ちます。
A: 空の積の定義により、は1と定められ、組合せ計算の整合性を保ちます。
Q: 再帰関数で引数を増やすとどうなりますか?
A: 無限ループやスタックオーバーフローが発生し、正しく計算できません。
A: 無限ループやスタックオーバーフローが発生し、正しく計算できません。
関連キーワード: 階乗、再帰関数、ベースケース、無限ループ、数学的定義

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

