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

平成24年度 春期 午前 問8

アルゴリズム

再帰に関する問題

関数 gcd(m, n) が次のように定義されている。m=135,n=35 のとき,gcd(m, n) は何回呼ばれるか。ここで,最初の gcd (135, 35) の呼出しも,1 回に数えるものとする。また,m,n(m > n ≧ 0)は整数とし,m mod n は m を n で割った余りを返すものとする。

〔関数の定義〕
 gcd(m, n) = m                  (n = 0 のとき)
 gcd(m, n) = gcd(n, m mod n)    (n > 0 のとき)
答えと解説を見る

✓ これが正解ウ4

解説

呼出しは四回で、最後の一回も数えます。

再帰の呼出し回数は、頭の中で足さずに一行ずつ書き出すのが確実です。最初の呼出しでは、百三十五を三十五で割った余りが三十になりますので、三十五と三十を引数として次が呼ばれます。次は三十五を三十で割った余りが五ですから、三十と五で呼ばれます。その次は三十を五で割った余りが零ですので、五と零で呼ばれます。最後の呼出しは、二つ目の引数が零のときの定義に当たり、一つ目の引数をそのまま返して終わります。書き出した行は四行ですので、呼出しは四回です。設問が最初の呼出しも一回に数えると断っているとおり、両端の数え方がこの問の要点になります。返ってきた値は二つの数に共通する最大の約数であり、この手続きがその値を求める形になっていることの確かめにもなります。

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

出典:平成24年度 春期 応用情報技術者試験 午前 問8

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