平成27年度 秋期 午前 問8
アルゴリズム
再帰に関する問題
自然数 n に対して,次のとおり再帰的に定義される関数 f(n) を考える。f(5) の値はどれか。
f(n): if n≦1 then return 1 else return n + f(n−1)
- ア6
- イ9
- ウ15
- エ25
答えと解説を見る
✓ これが正解ウ15
解説
5から1まで足し合わせるので、答えは15です。
この定義は、自分自身を呼び出す再帰の形で書かれています。引数が1以下なら1を返し、そうでなければ引数と、1つ小さい引数での値とを足します。ですから中身をたどると、引数を1ずつ減らしながら足し算が積み重なる形になります。検算は展開するだけです。f(5)は5とf(4)の和、f(4)は4とf(3)の和、f(3)は3とf(2)の和、f(2)は2とf(1)の和で、f(1)は1です。順に戻していくと、5と4と3と2と1をすべて足した形になり、値は15です。見る軸は2つです。1つ目は、どこで呼び出しが止まるかという条件。2つ目は、止まった後に何が積み上がるかです。この2点を押さえれば、途中で数え終えることも、演算を取り違えることもなくなります。
ほかの選択肢はなぜ違うのか
- ア6:呼び出しを途中で打ち切ると、この値になります。引数が3のときの結果が3と2と1の和にあたり6ですが、引数を5として始めた場合の答えではありません。
- イ9:1つ飛ばしに足すとこの値になります。5と3と1を足すと9ですが、定義は引数を1ずつ減らす形なので、間にある4と2も足し合わせる必要があります。
- エ25:引数の5に5を掛けた値、つまり5を2乗すると25になります。定義に書かれている記号は足す向きですし、仮に足す所を掛けるものとして読んでも、5から1までの積で120になり、25にはなりません。
出典:平成27年度 秋期 基本情報技術者試験 午前 問8
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)