Recursion 编写一个递归函数,用伪代码对奇数二进制数为1的值的个数求和

Recursion 编写一个递归函数,用伪代码对奇数二进制数为1的值的个数求和,recursion,pseudocode,Recursion,Pseudocode,我有一个家庭作业问题,上面写着: 使用本文介绍的伪代码原理编写一个递归函数sum_odd(n) 在讲座中,总结1到n之间的数字i,其中i的二进制表示形式 包含1的奇数,例如,14表示为0b1110,其中包含奇数 是1的。 您可以假设您可以访问一个函数binary_ones(d),该函数返回 在d的二进制表示中。您不应该写出此函数,但可以在 伪代码。您还可以假设n将大于0–不需要进行错误检查 到目前为止,我已经得出了以下结论: function sum_odd(n): read n

我有一个家庭作业问题,上面写着:

使用本文介绍的伪代码原理编写一个递归函数sum_odd(n) 在讲座中,总结1到n之间的数字i,其中i的二进制表示形式 包含1的奇数,例如,14表示为0b1110,其中包含奇数 是1的。 您可以假设您可以访问一个函数binary_ones(d),该函数返回 在d的二进制表示中。您不应该写出此函数,但可以在 伪代码。您还可以假设n将大于0–不需要进行错误检查

到目前为止,我已经得出了以下结论:

function sum_odd(n):
    read n 
    sum = 0 
    if n is less than or equals to 0 then
         return sum
    else if binary_ones(n) % 2 equals 1 then
         return sum = sum + sum_odd(n-1)
    else
         return sum_odd(n-1)
    end if 
我关心的是sum=sum+sum_奇数(n-1)部分。我不认为它会增加输入的第一个值,这让我怀疑我是否做对了


我需要一些帮助。

我还没有足够的声誉发表评论,所以我会将此作为一个答案发布

下面是我认为您的伪代码中存在的一些缺陷-

  • 您不需要
    读取n
    ,它是作为参数传递的,因此
    读取n
    应该由调用
    sum\u odd(n)
    的主函数完成
  • 你的担心是对的,它不应该是
    return sum=sum+sum\u odd(n-1)
    它应该是
    return n+sum\u odd(n-1)
    。你 没有做汇总数字部分,您没有添加数字 符合条件的

  • 您不需要
    sum=0
    变量,只需
    返回0
    即可
    n感谢您的帮助!我对返回0位有点困惑。这不会导致最终结果仅为0吗?除此之外,我现在完全理解了。
    sum=0
    为每个函数调用创建一个新变量
    sum
    返回0
    应替换
    返回和
    。如果n的值为