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

Writing a recursive function that sums up the number of values, with odd binary number of 1s, in pseudocode

我有一个家庭作业问题:

使用涵盖的伪代码原理编写递归函数sum_odd(n) 在讲座中,总结 1 和 n 之间的数字 i 其中 i 的二进制表示 包含奇数个 1,例如 14 表示为 0b1110 其中包含一个奇数 1 秒。 您可以假设您可以访问函数 binary_ones(d),其中 returns 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_odd(n-1) 部分。我不认为它会添加输入的第一个值,这让我怀疑我是否做对了。

需要一些帮助。

我还没有足够的声誉来发表评论,所以我将 post 作为答案。

所以我认为您的伪代码中存在一些缺陷-

  1. 你不需要read n,它作为参数传递,所以read n 应该由调用 sum_odd(n).
  2. 的主函数完成
  3. 你的担心是对的,不应该是return sum = sum + sum_odd(n-1),应该是return n + sum_odd(n-1)。你 没有做 sum up the numbers 部分,你没有添加数字 满足条件
  4. 您不需要 sum = 0 变量,对于 n <= 0 条件,您可以 return 0