基本情報技術者 2015年 秋期 午前(科目A) 問08
問題文
自然数に対して、次のとおり再帰的に定義される関数を考える。の値はどれか。
選択肢
ア:6
イ:9
ウ:15(正解)
エ:25
🔒 解説は解答すると表示されます
再帰関数の和計算【午前解説】
正解の理由
この再帰定義では、n≤1のときf(n)=1が定義されており、n>1のときはf(n)=n+f(n-1) です。よって
f(5)=5+f(4)=5+4+f(3)=5+4+3+f(2)=5+4+3+2+f(1)=5+4+3+2+1=15。
したがって正解は ウ(15)です。
解法ステップ
- 定義を確認: f(n) = 1 (n ≤ 1)、それ以外はf(n) = n + f(n-1)。
- f(1) = 1(基底)。
- f(2) = 2 + f(1) = 2 + 1 = 3。
- f(3) = 3 + f(2) = 3 + 3 = 6。
- f(4) = 4 + f(3) = 4 + 6 = 10。
- f(5) = 5 + f(4) = 5 + 10 = 15。
- 必要なら一般式 ()を使って確認する。
選択肢別の誤答解説
- ア: 6 — f(5)=5+1=6のように、中間の再帰展開(4,3,2を足す)を飛ばしてしまった場合に出る誤答。
- イ: 9 — f(5)=5+4=9と一回だけ再帰を展開して終えてしまうミス。再帰はさらに続けてf(3), f(2), f(1) を評価する必要があります。
- ウ: 正解(15) — 5+4+3+2+1の和で正しい値です。
- エ: 25 — 掛け算(5×5)や二乗の誤解、あるいは問題文を読み違えて別の操作を適用した結果に相当します。
よくある誤解
- 基底条件をn≤0と誤解してしまい、f(1) を再帰でさらに展開してしまう(結果がずれる)。
- 再帰の展開を途中で打ち切ってf(5)=5+f(0) のようにしてしまい、5+1=6を誤答とする。
- 再帰ではなく掛け算や別の操作(例えば5×5=25)だと誤解して25を選んでしまう。
補足コラム
- 一般式と証明: に対して 帰納法で示せます。初期n=1で成立し、仮定f(n)=n(n+1)/2とすると となり成立します。
- 実装例(Python):
def f(n):
if n <= 1:
return 1
return n + f(n-1)
print(f(5)) # 15
- 注意点:自然数の定義によって0を含む場合でも、本関数はn=0のとき1を返すので一般式はn≥1に限定して扱うと安全です。
FAQ
Q: f(0) はどうなりますか?
A: 定義によりn≤1のとき1を返すのでf(0)=1です。ただし三角数の公式はn≥1の場合を想定しています。
A: 定義によりn≤1のとき1を返すのでf(0)=1です。ただし三角数の公式はn≥1の場合を想定しています。
Q: 再帰を使わずに求める方法は?
A: ループで1からnまで足すか、閉形式 を使えば一発で計算できます。
A: ループで1からnまで足すか、閉形式 を使えば一発で計算できます。
Q: 計算量はどうなりますか?
A: 再帰実装だとO(n)(深さnの再帰呼び出し)、同様に反復でもO(n) です。閉形式計算はO(1) です。
A: 再帰実装だとO(n)(深さnの再帰呼び出し)、同様に反復でもO(n) です。閉形式計算はO(1) です。
関連キーワード: 再帰、再帰関数、漸化式、三角数、数学的帰納法、アルゴリズム、実装例、基底条件

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

