平成27年度 技術士第一次試験問題【専門科目】
【16】情報工学部門
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)) = f(1,f(2,0)) ・・・(3)より
=f(1,
f(2-1,1)) = f(1,f(1,1)) ・・・(2)
=f(1,
f(1-1,f(1,1-1))) = f(1,f(0,f(1,0))) ・・・(3)
=f(1,f(0,f(1-1,1)))=f(1,
f(0,f(0,1))) ・・・(2)
=f(1,
f(0,1+1))=f(1,f(0,2)) ・・・(1)
=f(1,
2+1)=f(1,3) ・・・(1)
=f(1-1,
f(1,3-1))=f(0,f(1,2)) ・・・(3)
=f(0,
f(1-1,f(1,2-1)))=f(0,f(0,f(1,1))) ・・・(3)
=f(0,
f(0,f(1-1,f(1,1-1))))=f(0,f(0,f(0,f(1,0)))) ・・・(3)
=f(0,f(0,f(0,f(1-1,1))))=f(0,
f(0,f(0,f(0,1)))) ・・・(2)
=f(0,
f(0,f(0,1+1))))=f(0,f(0,f(0,2)))) ・・・(1)
=f(0,
f(0,2+1))=f(0,f(0,3)) ・・・(1)
=f(0,3+1)=f(0,4) ・・・(1)
=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



EXCELのマクロのご相談なら ファーストマクロ 



V−14 目次 V−16
ファーストマクロ TOPページ