令和元年度 秋期 午前 問11
アルゴリズム
再帰に関する問題
自然数 n に対して,次のとおり再帰的に定義される関数 f(n) を考える。f(5) の値はどれか。
f(n): if n≦1 then return 1 else return n + f(n−1)
- ア6
- イ9
- ウ15
- エ25
答えと解説を見る
✓ これが正解ウ15
解説
1から5までの足し合わせになるので、15になります。
この関数は自分自身を呼び出す形、つまり再帰で定義されています。渡された値が1以下なら1を返して止まり、そうでなければ、いまの値に、一つ小さい値で呼び出した結果を足して返します。5を渡すと、5に対して4での結果を足す形になります。その4での結果は、4に3での結果を足したものです。同じように下りていくと、2まで来たところで1での結果が1と決まり、そこで折り返します。折り返したら、下から順に足し戻していくだけです。結局は5と4と3と2と1をすべて足すことになり、合計は15になります。どこで止まるかを先に押さえてしまえば、あとは単なる足し算に変わります。止まる条件を読み落とすと、下り続けて答えが出なくなります。止まる条件は、必ず最初に読んでおきます。呼び出しの深さを図に描くと確実です。
ほかの選択肢はなぜ違うのか
- ア6:6は、下りる途中で早く止めてしまったときに出やすい値です。5と1だけを足した形にあたり、あいだの三つを数え落としています。どこまで下りるのかを紙に書き出しておけば、この取りこぼしは起きません。途中の値がそのまま残ります。
- イ9:9は、足し合わせる範囲を途中で切り上げたときに現れます。5と4を足した形にあたり、そこから先の折り返しをしていません。戻ってくる側の計算まで書き切るのが、この形の要点です。折り返し地点を決めてから足し戻します。
- エ25:25は、渡された値を二回掛け合わせた形です。足していく関数と掛けていく関数は、定義の見た目がよく似ています。足すのか掛けるのかを一行目で確かめれば、分かれ道を間違えません。
出典:令和元年度 秋期 基本情報技術者試験 午前 問11
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)