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

平成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)
答えと解説を見る

✓ これが正解イ31

解説

割った余りを渡して呼び直すと、最大公約数が残ります。

この関数は、自分自身をもう一度呼び出す再帰の形で書かれています。二つ目の引数が〇になったとき、一つ目をそのまま返しました。〇でなければ、二つ目と、割った余りを渡して呼び直します。実際の値で追いかけます。七百七十五を五百二十七で割ると、余りは二百四十八でした。次は五百二十七を二百四十八で割り、余りは三十一になります。さらに二百四十八を三十一で割ると、割り切れました。そこで二つ目が〇になるので、一つ目の三十一が返ります。これはユークリッドの互除法そのもので、最大公約数を求めます。〇を挙げた肢は、最後の余りのほうを答えにした形でした。返るのは余りではなく、割られた側に残っていた数です。二百四十八は一回目の余りで、途中で通り過ぎた値でした。五百二十七は最初の引数のまま、一度も返っていません。

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

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

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