アルゴリズムとプログラミング

基本情報技術者試験再帰」の問題

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:hard
次の擬似言語は最大公約数を求める再帰手続である。gcd(252, 198) を呼び出したとき、戻り値はどれか。mod は剰余を表す。
○整数型: gcd(整数型: a, 整数型: b)
  if (b が 0 と等しい)
    return a
  endif
  return gcd(b, a mod b)
18
54
252
198
正解
18

再帰版互除法は b=0 になるまで gcd(b, a mod b) を繰り返す。(252,198)→(198,54)→(54,36)→(36,18)→(18,0) と進み、最後に a=18 を返すため アが正しい。

?選択肢ごとの解説

ア ○再帰版互除法は b=0 になるまで gcd(b, a mod b) を繰り返す。(252,198)→(198,54)→(54,36)→(36,18)→(18,0) と進み、最後に a=18 を返すため アが正しい。
イ ×1 段目の余り 252 mod 198=54 を最終結果と取り違えた、再帰を最後までたどらなかった誤りである。
ウ ×最初の引数 a=252 をそのまま返した、基底条件に到達する前で打ち切った誤りである。
エ ×2 番目の引数 b=198 を答えた、再帰の引数交換を追えていない誤りである。

くわしく

再帰版互除法では引数が (b, a mod b) へ入れ替わりながら縮小する。基底 b=0 のときの a が最大公約数であり、どの段の値を返すかを取り違えないことが核心である。

本番での押さえどころ

試験のコツ

(a, b) の組を 1 段ずつ書き下し、b が 0 になった行の a を読む。

覚え方

『余りで割り続け、余り 0 の手前が答え』を再帰でもそのまま適用する。

よくある誤り

最初の剰余 54 や入力値そのものを答え、基底まで再帰を展開しないミスが多い。

アルゴリズムとプログラミングの他の問題

この問題を、AIの8-ways解説つきで。

基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。

無料ではじめる →

ukamiru 過去問 · 基本情報技術者試験 · fe-b-algo-0073

【基本情報技術者試験】再帰の問題 — 解答・解説|ukamiru 過去問