過去問解きまくり研究所 ホーム

平成23年度 特別 午前 問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)
答えと解説を見る

✓ これが正解イ31

解説

余りが0になる一つ手前の値が返ります。

この関数は、2番目の引数が0のときだけ1番目の引数を返し、そうでなければ2番目の引数と、割った余りを新しい組にして自分を呼び直します。呼ぶたびに数は小さくなりますので、いつか余りが0になって止まります。実際にたどると、775を527で割った余りは248、527を248で割った余りは31、248を31で割った余りは0です。ここで2番目の引数が0になり、そのとき1番目に入っている31が返ります。割る数と余りを次の組にして繰り返し、割り切れた時点で割っていた数が残る、という形の手続きです。判定の軸は、止まる条件がどちらの引数を見ているか、そして返るのが途中の余りではなく止まった時点の1番目の引数だという点です。

ほかの選択肢はなぜ違うのか

出典:平成23年度 特別 基本情報技術者試験 午前 問6(改変:原典の図表をテキストに書き起こした)

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)