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

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


問題文

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

選択肢

ア:
イ:(正解)
ウ:
エ:

🔒 解説は解答すると表示されます

階乗の再帰関数の乗算回数【午前解説】

正解の理由

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

解法ステップ

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

補足コラム

  • 再帰での「操作回数」と「関数呼び出し回数」は別物です。今回の例では関数呼び出しは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 情報処理技術者試験対策アプリ

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