IPA過去問ドリル

平成29年度 春期 基本情報技術者試験 午前 問6

テクノロジ/アルゴリズム

関数 f(x, y) が次のとおり定義されているとき,f(775, 527) の値は幾らか。ここで,x mod y は x を y で割った余りを返す。 f(x, y): if y = 0 then return x else return f(y, x mod y)

出典:平成29年度 春期 基本情報技術者試験 午前 問6

正解:イ

解説

この関数はユークリッドの互除法そのものです。f(775,527) を計算すると,775 mod 527=248 なので f(527,248),527 mod 248=31 なので f(248,31),248 mod 31=0 なので f(31,0) を呼び出し,y=0 の条件が成立してxの値である31を返します。

選択肢ごとの解説

  • 誤り。0になるのは775と527の最大公約数が1のときに近い誤解ですが,実際の計算結果は0ではありません。
  • 正しい。ユークリッドの互除法により,775 mod 527=248,527 mod 248=31,248 mod 31=0 となり,最終的に31が返されます。
  • 誤り。248は計算過程で一時的に現れる余りの値であり,最終的な戻り値ではありません。
  • 誤り。527は最初の引数yの値であり,再帰呼出しが進んだ最終結果ではありません。
基本情報技術者の過去問を演習モードで解く