1

我是伪代码的新手,我无法将所有部分放在一起:

这是一个名为 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=2并且m=5输入数组包含[5, 6, 2, 3, 4, 8, 2]。Foo 返回什么值?使用求和符号,给出 Foo 计算的通用公式。

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

第 2 行有三个条件语句:

  • 如果 k<1 // 如果 2<1..这是错误的
  • if m>n // 如果 5 大于数组中值的数量,即 7,则为 false
  • 如果 k>m // 如果 2>5,这是错误的

所以这个函数将显示第 3 行。第 3 行说:

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

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

4

3 回答 3

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],你应该自己找出来。继续你的分析。:)

于 2010-09-03T03:54:53.640 回答
1

所以取 6 并将其添加到 (2+1, 5, a[1].....,a[n])

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

于 2010-09-03T03:56:13.733 回答
0

我认为您很困惑,因为您的伪代码对我来说看起来像是真实的代码。我可能是错的,但我们被教导使用简单的英语短语以不同的方式编写伪代码。

于 2010-09-03T03:56:33.963 回答