次のプログラム中の に入れる正しい答えを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。 関数func1に与える引数と、関数func2に与える引数とが同じとき、二つの関数は同じ値を返す。プログラムでは、配列の領域外を参照してはならないものとする。
再帰の反復化は直近数個の値を窓で持ち回る
```
〔プログラム〕
○整数型: func1(整数型: n)
if (nが2以下)
return 1
endif
return 2 × func1(n − 2) + func1(n − 1)
○整数型: func2(整数型: n)
整数型の配列: data ← {1, 1, 1}
整数型: i
/* nが3より小さいときは繰返し処理を実行しない */
for (iを3からnまで1ずつ増やす)
data[1] ← data[2]
data[2] ← data[3]
data[3] ←
endfor
return data[3]
```
選択肢
- ア2 × data[1] + data[2]
- イ2 × data[2] + data[1]
- ウ2 × data[i − 1] + data[i − 2]
- エ2 × data[i − 2] + data[i − 1]
- オdata[3] + 2 × data[1] + data[2]
- カdata[3] + 2 × data[2] + data[1]
- キdata[3] + 2 × data[i − 1] + data[i − 2]
- クdata[3] + 2 × data[i − 2] + data[i − 1]
正解と解説
正解:ア 2 × data[1] + data[2]
func1 は「2つ前の値を2倍したものと1つ前の値の和」という漸化式です。func2 はこれを配列3要素の窓で置き換えており、繰返しの先頭で data[1]←data[2]、data[2]←data[3] とずらした直後は、data[1] が2つ前の値、data[2] が1つ前の値を保持しています。したがって空欄には 2 × data[1] + data[2] を入れれば func1 と同じ値が求まります。要素番号を i で参照する式は、data の要素数が3しかないため領域外参照になり使えません。
選択肢ごとの解説
- ア正解。ずらした後の data[1] が2つ前、data[2] が1つ前の値に対応します。
- イ2倍する対象が1つ前の値になっており、漸化式と係数が入れ替わっています。
- ウdata の要素数は3なので、i を添字に使うと領域外参照になります。
- エ同じく i を添字に使っており、配列の範囲を超えてしまいます。
- オ不要な data[3] を足しており、漸化式より大きな値になります。
- カ係数の対応も誤っている上、data[3] を余分に加算しています。
- キi を添字に使っているため領域外参照になります。
- ク同様に i による領域外参照で、加算項も余計です。
同じ分野の他の問題
- 次のプログラム中の a と b に入れる正しい答えの組合せを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。…2026年度 公開問題 科目B 問5
- 次のプログラム中の に入れる正しい答えを、解答群の中から選べ。 関数complementは、引数として渡された8ビット型…2026年度 公開問題 科目B 問2
- 次のプログラム中の に入れる正しい答えを、解答群の中から選べ。ここで、配列の要素番号は1から始まる。 次のプログラムは、…2026年度 公開問題 科目B 問1
- 次のプログラム中の に入れる正しい答えを、解答群の中から選べ。 関数changeは、10より大きい整数を引数nで受け取り…2025年度 公開問題 科目B 問2
- 次のプログラム中の a と b に入れる正しい答えの組合せを、解答群の中から選べ。 関数function1が受け取る引数…2025年度 公開問題 科目B 問1
最終更新:2026-08-25/解説・選択肢ごとの解説は資格暗記が独自に作成しています。問題文と選択肢の出典は上記のとおりです。