科目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 の公開問題。図・数式・下線などはテキストに直して掲載。解説は当サイト作成)

科目Bの解き方と全問の一覧

解説に誤りを見つけたら、解説の誤りを報告してください。

答えと解説を見る

正解:ア

覚える知識

再帰関数のトレース計算

漸化式で定義された再帰関数は、直前のいくつかの値を配列に持ち、値をずらしながら繰り返し計算に置き換えられる。

この問題で必要なこと

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] を足してしまい、漸化式に余分な項が入る。

この知識を科目Aの過去問で覚える レッスン「再帰呼出しと引数の渡し方」で学ぶ

同じ知識の過去問