考虑带有两个参数的相同递归 C函数
unsigned int foo(unsigned int n, unsigned int r) {
if (n > 0) return (n%r + foo (n/r, r ));
else return 0;
}
当函数foo 被调用为 foo(513, 2) 时,它的返回值是多少?
(一) 9
(乙) 8
(三) 5
(四) 2答案: (D)
解释: foo(513, 2) 将返回 1 + foo(256, 2)。除了最后一次调用 foo(1, 2) 之外,所有后续的递归调用(包括 foo(256, 2))都将返回 0 + foo(n/2, 2) 。最后一次调用 foo(1, 2) 返回 1。因此, foo(513, 2) 返回的值是 1 + 0 + 0…。 + 0 + 1。
函数foo(n, 2) 基本上返回数字 n 中的位总和(或设置位的计数)。
这个问题的测验