本文へスキップ

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


Since 2016.4.19

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

W−1

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