次のプログラム中の [ ] に入れる正しい答えを,解答群の中から選べ。…
科目B アルゴリズムとプログラミング 科目B 問3
次のプログラム中の [ ] に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1 から始まる。関数func1 に与える引数と,関数func2 に与える引数とが同じとき,二つの関数は同じ値を返す。プログラムでは,配列の領域外を参照してはならないものとする。
正答 ア
正答は ア。空欄は「2 × data[1] + data[2]」です。
func1 は、次の式で値が決まる再帰関数です。
func1(1) = func1(2) = 1(n が 2 以下なら 1)
func1(n) = 2 × func1(n - 2) + func1(n - 1)
値は 1, 1, 3, 5, 11, 21, … と続きます(例:func1(3) = 2 × 1 + 1 = 3、func1(4) = 2 × 1 + 3 = 5)。
func2 は、直前の 3 つの値を data に持ち、繰返しのたびに一つずつ前へずらしながら次の値を求めます。ずらした直後の data[1] は「二つ前の値」、data[2] は「一つ前の値」なので、新しい値は2 × data[1] + data[2] です。
解説の続きをみる続きを閉じる
【トレース(アの場合、n = 5)】
初め data = {1, 1, 1}
i = 3:ずらす → {1, 1, 1}、data[3] ← 2 × 1 + 1 = 3 → {1, 1, 3}
i = 4:ずらす → {1, 3, 3}、data[3] ← 2 × 1 + 3 = 5 → {1, 3, 5}
i = 5:ずらす → {3, 5, 5}、data[3] ← 2 × 3 + 5 = 11 → {3, 5, 11}
戻り値 11 は func1(5) = 2 × func1(3) + func1(4) = 2 × 3 + 5 = 11 と一致します。
n が 2 以下のときは繰返しをせず data[3] = 1 を返すので、これも一致します。
【ほかの選択肢】
イ 2 × data[2] + data[1] 誤り
→ i = 4 で 2 × 3 + 1 = 7 になり、func1(4) = 5 と合わない
ウ 2 × data[i - 1] + data[i - 2] 誤り
→ i = 4 で 2 × data[3] + data[2] = 2 × 3 + 3 = 9 で合わない。
i = 5 では data[4] を参照し、配列の領域外になる
エ 2 × data[i - 2] + data[i - 1] 誤り
→ i = 4 で 2 × data[2] + data[3] = 9 で合わない。
i = 5 で data[4] を参照し、領域外になる
オ〜ク(data[3] + … の形) 誤り
→ ずらした後の data[3] は一つ前の値と同じなので、それを余分に
足している。i = 3 でどれも 1 + 2 × 1 + 1 = 4 になり、func1(3) = 3 と合わない。キ・クは i = 5 で領域外も参照する
【ポイント】
data は要素が 3 つだけで、i は n まで増えるので、data[i - 1] のような i を使った参照は、すぐに領域外になります。
「ずらした後、どの要素に何番目の値が入っているか」を書き出すと、正しい式が見つかります。
出典:令和8年度 基本情報技術者試験 科目B 公開問題 問3(独立行政法人情報処理推進機構)出典元ページ
最終更新日
「科目B アルゴリズムとプログラミング」のほかの問題
- 2024年度(令和6年度)公開問題 科目B 問3次のプログラム中の [ ] に入れる正しい答えを,解答群の中から選べ。
- 2024年度(令和6年度)公開問題 科目B 問4次の記述中の [ ] に入れる正しい答えを,解答群の中から選べ。
- 2024年度(令和6年度)公開問題 科目B 問5次のプログラム中の [a] ~ [c] に入れる正しい答えの組合せを,解答群の中から選べ
- 2025年度(令和7年度)公開問題 科目B 問1次のプログラム中の [a] と [b] に入れる正しい答えの組合せを,解答群の中から選べ
- 2025年度(令和7年度)公開問題 科目B 問2次のプログラム中の [ ] に入れる正しい答えを,解答群の中から選べ。
- 2025年度(令和7年度)公開問題 科目B 問3次のプログラム中の [a] と [b] に入れる正しい答えの組合せを,解答群の中から選べ
スポンサーリンク





