副プログラムの再帰呼出しによる計算【基本情報技術者試験 科目B 公開問題】

令和8年度 基本情報技術者試験 サンプル問題 科目B 問3のブログのアイキャッチ画像 科目B 公開問題
広告

← 科目Bの公開問題一覧へ戻る

 基本情報技術者試験の科目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]

解答群

ア 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]

【解答】

【解説】

func1は,2 × func1(n - 2) + func1(n - 1) を計算する再帰的な副プログラムである。一方,func2 は,配列 data に計算結果を順番に保存しながら,func1 と同じ計算を繰返し処理で行っている。例えば,i = 3 のとき,func1(3) = 2 × func1(1) + func1(2) = 3 となるため,data[3] には 2 × data[1] + data[2] を代入すればよい。このように,計算結果を data に保存し,値を順番に入れ替えながら計算することで,func2 は func1 と同じ値を求めている。

【参考】

「令和8年度 基本情報技術者試験 公開問題 科目B 問3」の解答_画像

この問題のポイント

 この問題から学べることは,

  • 副プログラムの役割と使い方
  • 副プログラムの再帰呼出し
  • 再帰呼出しによって計算を行う方法
  • 配列を使って計算結果を順番に保持する方法
  • 再帰呼出しによる処理を繰返し処理で表す方法

です。特に,副プログラムが自分自身を呼び出す再帰呼出しでは,呼び出された副プログラムがどのように処理され,その戻り値がどのように利用されるのかを理解しておきましょう。

基本情報技術者試験の学習におすすめの参考書

基本情報技術者試験の合格を目指す方におすすめの参考書です。

令和08年 イメージ&クレバー方式でよくわかる かやのき先生の基本情報技術者教室
基礎理論からコンピュータ・ネットワーク・データベースまで、基本情報技術者試験の全範囲をわかりやすく学べる定番テキストです。図解が豊富で、初学者にもおすすめです。

キタミ式イラストIT塾 基本情報技術者 令和08年
イラストを使った解説が特徴の人気参考書です。基礎理論の考え方や計算問題もイメージで理解しやすく、独学学習との相性が良い一冊です。

令和08年 基本情報技術者 合格教本
試験範囲を体系的に学習したい方におすすめの教科書です。基礎理論の各テーマも丁寧に解説されており、理解を深めながら学習を進められます。

学習のお役に立ちましたら

この記事が少しでも学習のお役に立ちましたら,今後も分かりやすい解説や学習コンテンツを継続してお届けする励みになります。

よろしければ、このサイトを応援いただけますと嬉しいです。

※OFUSEは,クリエイターやコンテンツ制作を直接支援できるサービスです。

広告