考虑以下带有两个参数的递归 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 的值是多少?
考虑以下带有两个参数的递归 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。
您的结果将是 1。这是发生的情况:
foo (256, 2)
foo (128, 2)
foo (64, 2)
foo (32, 2)
foo (16, 2)
foo (8, 2)
foo (4, 2)
foo (2, 2)
foo (1, 2)
foo (0, 2)
展开完成,函数返回 1。