次の 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 の値は?
次の 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 の値は?
このコードは、実際には再帰です。
発生したリターンに従ってください:
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 を返します。