0

次の 2 つの引数を取る再帰的な C 関数について考えてみましょう。

unsigned int foo(unsigned int n, unsigned int r)
{ 
     if (n > 0)
         return (n % r) + foo(n / r, r); 
     else 
         return 0; 
}

foo(512,2) として呼び出されたときの関数 foo の値は?

4

2 に答える 2

0

このコードは、実際には再帰です。

発生したリターンに従ってください:

If n == 0; return 0;

If n == 1; return 1+foo(0,2)

If n == 2; return 0 + foo(1,2);

If n == 4; return 0 + foo(2,2);

  ...

if n == 2^n  return 0 + foo(0+foo(z^n-1,2));


....


So foo(512,2) == foo (2^n,2) == 0+f(1,2) == 1 +f(0,2) = 1;

1 を返します。

于 2013-08-10T06:35:20.317 に答える