C言語で再帰関数 f を以下のように定義するとき、関数呼出し f(24, 16, 0) が返す値として正しいものはどれか。なお、x==y は
x が y に等しいことを表す。
int f (int x, int y, int z) {
if (x==y) return z;
else if (x>y) return f(x-y, y, z+1);
else return f(x, y-x, z+1);
}
@ 2 A 8 B 24 C 42 D 2416
@
便宜上以下のように(1), (2), (3)で表記する。
if (x==y) return z; ・・・(1)
else if (x>y) return f(x-y, y, z+1); ・・・(2)
else return f(x, y-x, z+1); ・・・(3)
f(24, 16, 0) = f(24-16, 16, 0+1) ・・・(2)より
= f(8, 16, 1) = f(8, 16-8, 1+1) ・・・(3)より
= f(8, 8, 2) = 2 ・・・(1)より
目次 | W−2 |