📜  门|门CS 2011 |第 49 题

📅  最后修改于: 2021-09-24 05:24:12             🧑  作者: Mango

考虑带有两个参数的相同递归 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 中的位总和(或设置位的计数)。
这个问题的测验