科目B
令和8年度 基本情報技術者試験 科目B 公開問題 問3
次のプログラム中の に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は 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]
答えを選ぶ
出典:令和8年度 基本情報技術者試験 科目B 公開問題 問3(問題文は IPA の公開問題。図・数式・下線などはテキストに直して掲載。解説は当サイト作成)
解説に誤りを見つけたら、解説の誤りを報告してください。
答えと解説を見る
正解:ア
覚える知識
再帰関数のトレース計算
漸化式で定義された再帰関数は、直前のいくつかの値を配列に持ち、値をずらしながら繰り返し計算に置き換えられる。
この問題で必要なこと
func1 は f(1)=f(2)=1、f(n)=2f(n-2)+f(n-1)。func2 では値を前に詰めたあと、data[1]=f(i-2)、data[2]=f(i-1) になる。だから新しい data[3] には 2×data[1]+data[2] を入れる。i=3 のとき 2×1+1=3 で func1(3)=3 と一致するので、正解はア。
ひっかけ
イは係数の掛け方が逆(2f(n-1)+f(n-2) を計算してしまう)。ウ・エ・キ・クは要素番号に i を使っており、要素数3の配列の範囲外を参照する。オ・カは古い data[3] を足してしまい、漸化式に余分な項が入る。