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 |