返回值含义|图案

时间:2018-04-01 09:47:02

标签: c recursion

以下功能返回什么? (在意义上)

int f(int n){
    if(n == 0) return 0;
    else return n % 2 + f(n / 2)
}

尝试运行代码,但在结果中找不到任何模式

1 个答案:

答案 0 :(得分:3)

当以二进制表示数字n时,此函数的此输出可以解释为1的数量(在基数10中)。

基本情况是n == 0,其中1的数量为0

对于每个其他n,都会有一个递归调用。这有两个部分。第一个是n % 2,它找出n的最后一位。如果它是1,则它对返回的值有贡献,因此被计算。第二部分f(n/2)计算n除最后一位之外的所有位中的1的数量。这是因为n/2n,右移一位。

要将它组合在一起,该功能的工作原理如下。它检查最后一位,如果1,则将其添加到总计中。然后它会自动执行递归调用,最后一位被删除。这种情况一直持续到所有位都被删除,这由基本情况覆盖。