Algorithm 你能帮我避免使用递归吗,因为它会导致堆栈溢出

Algorithm 你能帮我避免使用递归吗,因为它会导致堆栈溢出,algorithm,recursion,Algorithm,Recursion,我对使用递归的函数有一个问题。要解释它有点困难,也有点长,所以我将试着只写要点,并给出一些伪代码。希望这是可以理解的 假设我有一个数字数组-正数应该加到给定的数字上,而如果有负数,它们的绝对值告诉我们从数组的哪个位置开始加下一个正数 Example: The given number is 5. array = [1, 2, -3, 5, 7, 8, 9] 0 1 2 3 4 5 6 <------- positions 示例: 给定的数字是5。

我对使用递归的函数有一个问题。要解释它有点困难,也有点长,所以我将试着只写要点,并给出一些伪代码。希望这是可以理解的

假设我有一个数字数组-正数应该加到给定的数字上,而如果有负数,它们的绝对值告诉我们从数组的哪个位置开始加下一个正数

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]

01 2 3 4 5 6你不能直接使用循环吗

for (sum=i=0;i<array_length;) {
  if (array[i]<0) i=-array[i];
  else sum += array[i++];
}

for(sum=i=0;i我想这能奏效吗

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;
}
专用长和(int[]数组)
{
长结果=0;
int指数=0;
while(索引<数组长度)
{
int val=数组[索引];
if(val<0)
{
指数=Math.Abs(val);
}
其他的
{
结果+=数组[index++];
}
}
返回结果;
}
i=0
a=[1,2,-3,5,7,8,9]
总和=0
而(i=0
总和+=a[i]
我++
其他的
i=abs(a[i])
} 

也许是这样的

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]
    }
}
sum(数组,s)//s是初始和值
{
对于i=0到最后一个数组索引
{
if(数组[i]<0)
{
对于j=-array[i]到最后一个数组索引
{
s+=数组[j]
}
返回s
}
s+=数组[i]
}
}

嗯…我不知道你从哪里得到了
5+3+29
来自…?你确定它不是
返回数字+和(数组[abs(元素)到结尾])
?不,我也不觉得他好像数了5两次….,5+f([1,2,-3,5,7,8,9]如果您的语言支持,您可以使用累加器确保您的函数是尾部递归的。“这里我有一些其他操作,保存一些状态”-这种情况下,最好给出一个实际的示例,而不是模糊的描述。此外,任何递归都可以(通常相当容易)通过使用堆栈数据结构转换为迭代。他从来没有说过什么语言,有些语言不允许您更改循环变量?我想这就是工作,但函数开头有一些操作,如果从新位置开始求和,我必须重复这些操作。有什么想法吗:我不明白,抱歉。W您必须重复哪些操作?
对于数组中的每个元素,从第一个到最后一个{//这里我有一些其他操作,保存一些状态
@Faery在
if()
语句之前,其他操作不能进入循环的顶部吗?哎呀!我真是个傻瓜
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])
} 
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]
    }
}