简单的伪代码问题

时间:2010-09-03 03:44:53

标签: pseudocode

我是psuedocode的新手,我无法将所有部分组合在一起:

这是一个名为foo的函数的定义,它的输入是两个整数和一个整数数组a[1] ... a[n]

1 Foo(k,m, a[1],...,a[n]) 
2   if (k < 1 or m > n or k > m) return 0 
3   else return a[k] + Foo(k+1,m,a[1],...,a[n])

假设输入整数为k=2m=5,输入数组包含[5, 6, 2, 3, 4, 8, 2]。 Foo有什么价值?使用求和符号,给出Foo计算的通用公式。

这个让我头疼。这是我到目前为止所做的:

第2行有三个条件语句:

  • 如果k <1 //如果2 <1 ..这是假的
  • 如果m> n //如果5大于数组中的值,即7,那么这是假的
  • 如果k> m //如果2> 5,则为假

所以这个功能会显示第3行。第3行说:

  • 返回a[k] a[2],这是数组的第二个值,即6。所以请取6并将其添加到(2+1, 5, a[1].....,a[n])

我所做的是正确的吗?如果是这样,我怎么知道a[n]是什么?我应该找到那个吗?这一切的最终结果是什么?

3 个答案:

答案 0 :(得分:2)

简单回答:该函数返回所有数字a [k],a [k + 1],... a [m]之和。

到目前为止,你所做的是正确的。 “n”只是一个占位符,意味着数组的最后一个元素。因此,如果您的输入数组是{5,6,2,3,4,8,2}n = 7(因为您有七个元素)和a[n] = 2

但是为什么它返回所有数字a [k],a [k + 1],... a [m]的总和,你应该自己找出来。继续进行分析。 :)

答案 1 :(得分:1)

  

所以拿6并加到(2 + 1,5,   一个[1] .....,一个[N])

取6并将其添加到 Foo (2 + 1,5,a [1] .....,a [n])。这是一个递归函数。您必须再次使用k = 3和m = 5来评估函数。

答案 2 :(得分:0)

我觉得你很困惑,因为你的伪代码看起来像真正的代码。我可能错了,但我们被教导使用简单的英语短语以不同的方式编写伪代码。