基本情報技術者試験 令和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]
選択肢を押すと答え合わせができます。
正解と解説を見る
【正解】ア
func1の戻り値をF(n)とすると、F(1)=F(2)=1で、nが3以上ではF(n)=2×F(n-2)+F(n-1)です。func2では、代入前のdata[2]とdata[3]が直前の二つの値を保持しています。data[1]←data[2]、data[2]←data[3]と順に移した後は、data[1]がF(i-2)、data[2]がF(i-1)に相当します。したがって、data[3]には2×data[1]+data[2]を格納します。実際に追跡すると、初期値は{1、1、1}で、i=3の後は{1、1、3}、i=4の後は{1、3、5}、i=5の後は{3、5、11}です。これはF(3)=3、F(4)=5、F(5)=11と一致します。
イは誤りです。F(i-1)を2倍する式になり、係数を掛ける項が逆です。
ウは誤りです。固定長3の配列をiで添字指定しており、i=5ではdata[4]を参照して領域外になります。
エも誤りです。iに応じた添字によって領域外を参照する上、移動後のdata[1]とdata[2]を使う漸化式になっていません。
オは誤りです。更新前のdata[3]を余分に加えており、i=3で4になります。
カも誤りです。data[3]を余分に加え、さらに2倍する項も逆です。
キは誤りです。i=3で4となり、iが大きくなると領域外も参照します。
クも誤りです。余分なdata[3]を加えるためi=3で4となり、領域外参照も発生します。
【ポイント】 再帰処理は、直前の計算結果を配列に保持すれば繰返し処理へ置き換えられます。 代入が順番に実行される点に注意し、各代入後に要素が何を表すか確認します。 配列の添字が常に1~要素数に収まるかも確認します。
【参考】擬似言語の記述形式(基本情報技術者試験用)
擬似言語を使用した問題では、各問題文中に注記がない限り、次の記述形式が適用されているものとする。
〔擬似言語の記述形式〕 ・○手続名又は関数名 手続又は関数を宣言する。 ・型名: 変数名 変数を宣言する。 ・/* 注釈 */ 、 // 注釈 注釈を記述する。 ・変数名 ← 式 変数に式の値を代入する。 ・手続名又は関数名(引数, …) 手続又は関数を呼び出し、引数を受け渡す。
・if (条件式1) 処理1 elseif (条件式2) 処理2 elseif (条件式n) 処理n else 処理n + 1 endif 選択処理を示す。条件式を上から評価し、最初に真になった条件式に対応する処理を実行する。以降の条件式は評価せず、対応する処理も実行しない。どの条件式も真にならないときは、処理n + 1を実行する。各処理は、0以上の文の集まりである。elseifと処理の組みは、複数記述することがあり、省略することもある。elseと処理n + 1の組みは一つだけ記述し、省略することもある。
・while (条件式) 処理 endwhile 前判定繰返し処理を示す。条件式が真の間、処理を繰返し実行する。処理は、0以上の文の集まりである。
・do 処理 while (条件式) 後判定繰返し処理を示す。処理を実行し、条件式が真の間、処理を繰返し実行する。処理は、0以上の文の集まりである。
・for (制御記述) 処理 endfor 繰返し処理を示す。制御記述の内容に基づいて、処理を繰返し実行する。処理は、0以上の文の集まりである。
〔演算子と優先順位〕(上ほど優先度が高い) ・式:() . ・単項演算子:not + - ・二項演算子(乗除):mod × ÷ ・二項演算子(加減):+ - ・二項演算子(関係):≠ ≦ ≧ < = > ・二項演算子(論理積):and ・二項演算子(論理和):or 注記 演算子 . は、メンバ変数又はメソッドのアクセスを表す。 演算子 mod は、剰余算を表す。
〔論理型の定数〕 true, false
〔配列〕 配列の要素は、"["と"]"の間にアクセス対象要素の要素番号を指定することでアクセスする。なお、二次元配列の要素番号は、行番号、列番号の順に","で区切って指定する。 "{"は配列の内容の始まりを、"}"は配列の内容の終わりを表す。ただし、二次元配列において、内側の"{"と"}"に囲まれた部分は、1行分の内容を表す。
〔未定義、未定義の値〕 変数に値が格納されていない状態を、"未定義"という。変数に"未定義の値"を代入すると、その変数は未定義になる。
出典:令和8年度 基本情報技術者試験 科目B 公開問題 問3
※ 解説は SkillStack 編集部が作成したものです。Web 表示のため、図表の配置や表記を一部改めています。