本文へスキップ

技術士試験(情報工学部門)・情報技術者試験。ファーストマクロ。


Since 2016.4.19

平成27年度 技術士第一次試験問題【専門科目】

V−15

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