以下功能返回什么? (在意义上)
int f(int n){
if(n == 0) return 0;
else return n % 2 + f(n / 2)
}
尝试运行代码,但在结果中找不到任何模式
答案 0 :(得分:3)
当以二进制表示数字n
时,此函数的此输出可以解释为1的数量(在基数10中)。
基本情况是n == 0
,其中1的数量为0
。
对于每个其他n
,都会有一个递归调用。这有两个部分。第一个是n % 2
,它找出n
的最后一位。如果它是1
,则它对返回的值有贡献,因此被计算。第二部分f(n/2)
计算n
除最后一位之外的所有位中的1的数量。这是因为n/2
是n
,右移一位。
要将它组合在一起,该功能的工作原理如下。它检查最后一位,如果1
,则将其添加到总计中。然后它会自动执行递归调用,最后一位被删除。这种情况一直持续到所有位都被删除,这由基本情况覆盖。