修了試験 2014-07-27実施分 基本情報技術者試験 問8
関数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)
正答2
解説
正解は2です。 この関数は、yが0ならxを返し、そうでなければf(y,x mod y)を再帰的に呼び出します。 これはユークリッドの互除法であり、xとyの最大公約数を求める関数です。 【計算】 f(775,527):775 mod 527=248なので、f(527,248)を呼び出します。 f(527,248):527=248×2+31より、527 mod 248=31なので、f(248,31)を呼び出します。 f(248,31):248=31×8より、248 mod 31=0なので、f(31,0)を呼び出します。 f(31,0):yが0なので、x=31を返します。 【選択肢別解説】 1:× 0は途中で求まる余りの値です。 関数はyが0になったときのxを返すので、戻り値は0ではありません。 2:○ 再帰をたどると、最後にf(31,0)となり31が返ります。 31は775と527の最大公約数です。 3:× 248は1回目の余り(775 mod 527)です。 途中の値であり、最終的な戻り値ではありません。 4:× 527は最初の引数yの値です。 再帰で値が変わっていくので、戻り値にはなりません。 【ポイント】 「yが0ならx、そうでなければ(y,x mod y)で繰り返す」はユークリッドの互除法の定型です。 検算として775=31×25、527=31×17となることも確かめられます。まとめて解く
修了試験 2014-07-27実施分を通しで解く(80問)→