我的函数有问题,使用递归。解释它本身有点困难和冗长,因此我将尝试编写基本要素并给出一些伪代码。希望这是可以理解的。
假设我有一个数字数组 - 正数应该添加到给定数字,而如果有负数,它们的绝对值告诉数组从哪个位置开始添加下一个可能的数字。
Example:
The given number is 5.
array = [1, 2, -3, 5, 7, 8, 9]
0 1 2 3 4 5 6 <------- positions
所以我们有:5(给出)+ 1 + 2 +(数组[来自第3个元素] = 5 + 7 + 8 + 9)= 5 + 3 + 29 = 37
我有(假设函数的主体有权访问并更改名为number的变量):
number = 5;
sum(array)
{
for each element from first to last in the array {
//here i have some other actions, saving some states
if (element < 0) {
return sum(array[abs(element) to end])
}
number += element
}
}
您能否告诉我一些如何删除递归的想法或指示?
PS:抱歉,如果问题太笼统或不可理解,请原谅我,如果是这样,我会尽快将其删除。
答案 0 :(得分:3)
难道你不能只使用简单的循环吗?
for (sum=i=0;i<array_length;) {
if (array[i]<0) i=-array[i];
else sum += array[i++];
}
或者我错过了什么?
答案 1 :(得分:2)
我认为这可以解决问题吗?
private long Sum(int[] array)
{
long result = 0;
int index = 0;
while (index < array.Length)
{
int val = array[index];
if (val < 0)
{
index = Math.Abs(val);
}
else
{
result += array[index++];
}
}
return result;
}
答案 2 :(得分:1)
i=0
a = [1,2,-3,5,7,8,9]
sum = 0
while (i < a.count)
{
if a[i] >= 0
sum += a[i]
i++
else
i = abs(a[i])
}
答案 3 :(得分:1)
也许是这样的?
sum(array, s) // s is the initial sum value
{
for i = 0 to last array index
{
if (array[i] < 0)
{
for j = -array[i] to last array index
{
s += array[j]
}
return s
}
s += array[i]
}
}