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

基本情報技術者 2012年 秋期 午前(科目A)07


問題文

!の値を、次の関数によって計算する。乗算の回数を表す式はどれか。

選択肢

(正解)

階乗を求める再帰関数の乗算回数【午前2 解説】

要点まとめ

  • 結論→与えられた再帰定義では基底ケース F(0)=1 を除き n>0 の各再帰呼び出しで1回乗算が発生し、合計は n です。
  • 根拠→乗算回数を M(n) と置くと M(0)=0、M(n)=M(n-1)+1 となり、漸化式を展開すると明確に M(n)=n となります。
  • 差がつくポイント→反復的に 1×2×...×n と計算すると n-1 になることがあり、再帰で n=1 のときに 1 を掛ける操作を見落とさないこと。

正解の理由

正解は (n)です。関数定義を見ると、F(0)=1(乗算なし)で、n>0 の場合は「n × F(n-1)」という乗算を1回行います。よって n>0 の範囲で再帰の深さ分だけ乗算が行われ、n 回の乗算になります。n=0 のときも式 n は 0 を与え、整合します。

よくある誤解

  • 「階乗の乗算は n-1 回」と誤解する人が多い:反復的に 1×2×...×n を順に掛ければ n-1 回ですが、本問の再帰定義では n=1 のときにも 1 を掛ける操作があるため回数が1増えます。
  • 「関数呼び出し回数と乗算回数を混同」:再帰呼び出し回数は n+1(n から 0 まで)だが、乗算は n>0 の呼び出しでのみ発生する点を区別する必要があります。
  • 「基底ケースの扱い忘れ」:F(0)=1 の扱いを誤ると M(0) を 1 と数えてしまい誤答につながります。

解法ステップ

  1. 乗算回数を M(n) と定義する。
  2. ベースケースを考える:F(0)=1 のとき乗算は行われないので M(0)=0。
  3. 再帰式から漸化式を立てる:n>0 のときの処理は「1回の乗算 + F(n-1) の乗算数」なので
  4. 漸化式を展開または帰納的に解く:, , したがって一般に
  5. よって乗算回数を表す式は であり、選択肢は

選択肢別の誤答解説

  • ア:
    反復的に 1×2×...×n と計算する場合は確かに n-1 回ですが、問題の再帰定義では n=1 のときにも「1 × F(0)」という乗算を行うため回数が1多くなります。従って本問には当てはまりません。
  • :
    正解。理由は上記の通り。F(0) では乗算が発生せず、n>0 の各レベルで1回ずつ乗算が発生するため合計 n 回です。
  • ウ:
    オーダーが大きすぎます。漸化式 に従う単純な線形増加であり二次になる理由はありません。
  • エ:
    乗算の回数が階乗の値そのものになることはありません。n! は演算結果の数値であり、乗算回数を表すには不適切です。

補足コラム

  • 再帰での「操作回数」と「関数呼び出し回数」は別物です。今回の例では関数呼び出しは n+1 回(n, n-1, ..., 0)ですが、乗算は n>0 の呼び出しのみで発生するため n 回になります。
  • もし問題の関数を F(1)=1、F(n)=n×F(n-1)(n>1)という形に変えると、乗算回数は n-1 回になります。定義の微妙な違いが回数に直接影響します。
  • 実装によっては「1 を掛ける操作は意味がない」として最適化することもありますが、問題文の定義に従って数えるのが試験対策では重要です。

FAQ

Q: n=0 のときの答えはどうなりますか?
A: M(0)=0 なので問題の式 n を使うと 0 になり整合します。したがって一般式は n で正しいです。
Q: 反復的実装と比較してどちらが効率的ですか?
A: 乗算回数だけで見れば再帰は n 回、反復(初期値 1 から乗算)では n-1 回と一回の差があります。実際の性能は関数呼び出しのオーバーヘッド等も考慮する必要があります。
Q: 漸化式の解き方がわかりません。どうすればよいですか?
A: 単純な加算型の漸化式 は展開(帰納的に書き下す)するか、初期条件から規則を見つけて一般形を導けば解けます。

関連キーワード: 再帰、乗算回数、漸化式、演算回数、アルゴリズム解析、階乗、帰納法、実装差異
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

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

クイズ画面へ遷移する

すぐに利用可能!

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

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