用伪代码编写一个递归函数,将数值相加,二进制数为奇数的1,用伪代码表示。

问题描述 投票:1回答:1

我有一道作业题,其中写道:"请写一个递归函数sum_odd(n)。

写一个递归函数sum_odd(n), 使用讲座中讲到的伪代码原理, 将1和n之间的数字i相加, 其中图标的二进制表示法包含一个奇数1s, 例如, 14表示为0b1110, 其中包含一个奇数1s.你可以假设你可以访问一个函数binary_ones(d), 它返回d的二进制表示法中的ones数. 你不应该写出这个函数, 但可以在你的伪代码中调用它. 你也可以假设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)这部分. 我认为它不会添加输入的第一个值,这让我怀疑我是否做对了。

可以使用一些帮助。

recursion pseudocode
1个回答
1
投票

我的名气还不够大,还不能评论,所以我就把这个作为答案贴出来。

那么,以下是我认为你的伪代码中的一些缺陷。

  1. 你不需要 read n它被作为一个参数传递,所以 read n应该由主函数完成,主函数调用了 sum_odd(n).
  2. 你的担心是对的,不应该是这样的 return sum = sum + sum_odd(n-1) 应该是 return n + sum_odd(n-1). 你没有做 合计 部分,你没有加上满足条件的数字。
  3. 你不需要 sum = 0 变量,你可以只用 return 0 对于 n <= 0 状况。
© www.soinside.com 2019 - 2024. All rights reserved.