C言語で再帰関数 f を次のように定義するとき、関数呼び出し f(2,1)の返す値として正しいものはどれか。
int f(int x, int y) {
if (x == 0) return y + 1;
else if (y == 0) return f(x - 1、1);
else return f(x - 1, f(x, y - 1));
}
@ 4 A 5 B 6 C 7 D 8
A
if (x == 0) return y + 1; ・・・(1)
else if (y == 0) return f(x - 1、1); ・・・(2)
else return f(x - 1, f(x, y - 1)); ・・・(3)
とすると、
f(2, 1) = f(2-1, f(2, 1-1)) ・・・(3)より
= f(1, f(2, 0)) = f(1, f(2-1, 1)) ・・・(2)より
= f(1, f(1,1)) = f(1, f(1-1, f(1, 1-1))) ・・・(3)より
= f(1, f(0, f(1,0))) = f(1, f(0, f(1-1,1))) ・・・(2)より
= f(1, f(0, f(0,1))) = f(1,f(0, 1+1))・・・(1)より
= f(1, f(0, 2)) = f(1, 2+1) ・・・(1)より
= f(1, 3) = f(1-1, f(1, 3-1)) ・・・(3)より
= f(0, f(1, 2)) = f(0, f(1-1, f(1,2-1))) ・・・(3)より
= f(0, f(0, f(1,1)))
ここで、上記の計算途中で、f(1,1) = 3 であることが分かっているので、
= f(0, f(0, f(1,1)))
= f(0, f(0, 3)) = f(0, 3+1) ・・・(1)より
= f(0, 4) = 4+1 ・・・(1)より
= 5
【補足】
f(2,1) = f(1,3) = f(0,4) = 5
f(1,2) = f(0,3) = 4
f(2,0) = f(1,1) = f(0.2) = 3
f(1,0) = f(0,1) = 2
V−14 | 目次 | V−16 |