この概念が出た関連問題

この試験の対策ガイド

基本情報技術者試験 対策ガイド

合格率・勉強法・参考書の選び方をまとめています

見る →
答えと解説を見る(先に解くのがおすすめ)

正解は ウ

解説

再帰関数の値を求める問題です。f(n) は「n が1以下なら1を返し、そうでなければ n に f(n−1) を加えて返す」と定義されています。再帰関数は、自分自身の呼び出しが基底条件(ここでは n ≦ 1)に到達するまで展開し、そこから順に値を確定させていくのが基本の解き方です。f(5) を展開すると、f(5) = 5 + f(4)、f(4) = 4 + f(3)、f(3) = 3 + f(2)、f(2) = 2 + f(1) となり、f(1) は基底条件 n ≦ 1 に該当するので1を返します。ここから逆にたどると、f(2) = 2+1 = 3、f(3) = 3+3 = 6、f(4) = 4+6 = 10、f(5) = 5+10 = 15 となります。つまり f(5) は 5+4+3+2+1、すなわち1から5までの総和を計算する関数であることが分かります。ウが正解です。再帰問題は展開の途中でメモを書き、基底条件から値を巻き戻すことが確実な解法です。

なぜ他の選択肢は違うのか

選択肢 ア
6 は f(3) の値(3+2+1 = 6)に相当します。f(5) を求めるには f(4)、f(3) と順に展開して5段階すべてを足し合わせる必要がありますが、展開を途中の f(3) で打ち切ってしまうとこの値になります。再帰の展開は基底条件 n ≦ 1 に達するまで続け、何段の呼び出しがあるかを丁寧に追跡することが大切です。
選択肢 イ
9 は 5+4 = 9、つまり再帰の展開を f(4) を定数のように扱って2段で打ち切った場合に出てくる値です。f(4) 自体がさらに f(3)、f(2)、f(1) へと展開される再帰呼び出しであることを見落とすと、このような中途半端な和になります。各呼び出しが「n +(さらに下の階層の結果)」を返すことを意識しましょう。
選択肢 エ
25 は 5 × 5、すなわち n の2乗と誤解した場合の値です。f(n) = n + f(n−1) という定義は「加算の繰り返し(総和)」であって乗算ではありません。再帰定義を見た瞬間に思い込みで式の意味を決めつけず、小さい値(f(2) = 3 など)で一度検算してから f(5) に進むと、この種の取り違えを防げます。

解くときのポイント

再帰関数は「基底条件まで展開 → 逆順に値を確定」が鉄則。f(2)=3 のような小さい値で検算してから本番の値を計算すると取り違えを防げる。