考虑以下带有两个参数的递归 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。