問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)
○正解
×不正解
-
0
-
31
-
248
-
527
解説
関数の再帰呼び出しに関する設問です。
再帰呼び出しが止まる条件が、f(x, y)でy=0になることであるので、呼び出しで指定されるf(y, x mod y)の“x mod y”つまりyで割った余りが0になるまで何度も割っていけばいいわけです。f(x, 0)になったときの、xの値が関数の返り値として指定されているので、これが答えになります。
f(775, 527) = f(527, 775mod527)
= f(527, 248) = f(248, 527mod248)
= f(248, 31) = f(31, 248mod31)
= f(31, 0)
= 31