戦国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 情報処理技術者試験対策アプリ

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