戦国IT - 情報処理技術者試験の過去問対策サイト
お知らせお問い合わせ料金プラン

応用情報技術者 2017年 秋期 午前207


問題文

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

選択肢

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 解説】

要点まとめ

  • 結論:階乗の再帰的定義は「n=0のとき1を返し、それ以外はn×fact(n-1)」である。
  • 根拠:階乗は0! = 1が基本で、n! = n × (n-1)!の関係が成り立つため。
  • 差がつくポイント:ベースケースの値設定と引数の減少方向を正しく理解しているかが重要。

正解の理由

選択肢ウは、階乗の定義通り「n=0なら1を返し、それ以外はn×fact(n-1)」となっており、正しい再帰関数の形です。0!が1であることと、再帰呼び出しが引数を1ずつ減らしていく点が正確に表現されています。

よくある誤解

0!を0と誤認したり、再帰呼び出しの引数を増やす方向にしてしまうと無限ループや誤った結果になります。

解法ステップ

  1. 階乗の定義を確認する(0! = 1、n! = n × (n-1)!)。
  2. ベースケース(n=0)で返す値を決める。
  3. 再帰呼び出しの引数が減少することを確認する。
  4. 選択肢の条件と返り値を比較し、正しいものを選ぶ。

選択肢別の誤答解説

  • ア: n=0のとき0を返すため誤り。0!は1。
  • イ: n=0のとき0を返し、fact(n+1)で引数が増加し無限再帰になる。
  • : 正解。0! = 1で、引数を減らす正しい再帰定義。
  • エ: n=0のとき1を返すが、fact(n+1)で引数が増加し無限再帰になる。

補足コラム

階乗は数学的に0! = 1と定義されており、再帰関数では必ずベースケースを設けて無限再帰を防ぎます。引数を減らすことで最終的にベースケースに到達し、計算が終了します。

FAQ

Q: なぜ0!は1なのですか?
A: 0! = 1は数学的な約束事で、組み合わせの定義や階乗の連続性から導かれています。
Q: 再帰関数で引数を増やすと何が問題ですか?
A: ベースケースに到達できず無限ループやスタックオーバーフローが発生します。

関連キーワード: 階乗、再帰関数、ベースケース、無限再帰、数学的定義
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

応用情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてプライバシーポリシー利用規約特商法表記開発者について