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

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


問題文

自然数に対して、次のとおり再帰的に定義される関数を考える。の値はどれか。    

選択肢

ア:6
イ:9
ウ:15(正解)
エ:25

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

再帰的な和の計算【午前解説】

正解の理由

与えられた定義は「nが1以下なら1を返す。それ以外はn + f(n-1)」ですから、n≥1のときは f(n) = n + (n-1) + … + 1、すなわち1からnまでの和になります。したがってf(5) = 1+2+3+4+5 = 15で、選択肢の中では ウ が正しい値です。一般形は です。

解法ステップ

  1. 定義を確認:if n ≤ 1 then return 1 else return n + f(n-1)。
  2. 再帰を展開する: f(5) = 5 + f(4)
    f(4) = 4 + f(3)
    f(3) = 3 + f(2)
    f(2) = 2 + f(1)
    f(1) = 1(ここで打ち切り)
  3. 足し合わせる:f(5) = 5+4+3+2+1 = 15
  4. 必要なら公式を用いる: に代入して 。

選択肢別の誤答解説

  • ア: 6
    6は「n+1」や「部分和を途中で止めた」などの誤った理解から出やすい値です。例えばf(5)=5+1のように誤ってf(4) を1として打ち切ると出ますが定義に反します。
  • イ: 9
    9は「1+2+3+3のように重複や打ち間違いで項を誤る」か、「f(2)=3をそのまま繰り返す」などの計算ミスで現れます。正しい展開では1 〜 5の和になります。
  • ウ: 15
    正しい再帰展開と和の計算の結果です。
  • エ: 25
    25は5^2の値で、二乗と誤解した結果や「(n+0)^2」的な誤りから出ます。問題の定義は乗算や二乗ではなく加算の再帰です。

よくある誤解

  1. 基底(base case)を誤解してn=0が必ず0になると考える。与題ではn ≤ 1のとき1を返すためf(0)=1です。基底を変えるときはどのnに影響するかを確認する必要があります。
  2. 再帰を掛け算(階乗)や別の操作と混同する。n + f(n-1) をn × f(n-1) と見間違えるとまったく別の成長(階乗)になります。
  3. 展開途中で打ち切る、又は項の順序や個数を見誤る(例えばf(5) を5+4+1としてしまうなど)。

補足コラム

  • 数学的帰納法による公式の証明(スケッチ):
    命題P(n): f(n)=n(n+1)/2。n=1のとき左辺f(1)=1、右辺は1·2/2=1で成り立つ。あるk≥1でP(k) が成り立つと仮定すると、 f(k+1)= (k+1) + f(k) = (k+1) + k(k+1)/2 = (k+1)(k/2+1) = (k+1)(k+2)/2、 よってP(k+1) も成り立ち、帰納法によりn≥1で公式が成立します。
  • 基底をf(0)=0に変更した場合の影響:
    基底を0にして としても、n≥1に対する値は変わりません(n≥1のときは依然として1からnまでの和になるため)。変わるのはn=0の値のみで、公式は0からnまでの和としてn≥0まで拡張して扱うことができます()。
  • 実装例(Python):
# 再帰実装
def f(n):
    if n <= 1:
        return 1
    return n + f(n-1)

# 反復実装(効率的)
def f_iter(n):
    s = 0
    for k in range(1, n+1):
        s += k
    return s

FAQ

Q1: なぜf(1) を別扱いにしているのですか?
A1: 定義に「n ≤ 1のとき1を返す」とあるため、再帰の打ち切り条件(基底)としてf(1)=1が与えられています。これにより再帰が深くならず確定値が得られます。
Q2: 基底をf(0)=0に変えたら全てのf(n) が変わりますか?
A2: いいえ。基底をf(0)=0に変えても、n≥1のf(n) の値は変わりません(再帰定義がn + f(n-1) の形で、最終的に1を含む和になるため)。変化するのはn=0の値だけで、公式はn≥0に自然に拡張できます。
Q3: この形式はどんな漸化式の一例ですか?
A3: これは一次の線形漸化式の一例で、解は等差級数(等差数列の和)として求まります。一般的に同種の形は和の公式や帰納法で解けます。

関連キーワード: 再帰、漸化式、等差数列、帰納法、再帰展開、アルゴリズム実装
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

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

クイズ画面へ遷移する→

すぐに利用可能!

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

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