首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归数组程序中的小问题

递归数组程序中的小问题
EN

Stack Overflow用户
提问于 2013-04-28 01:32:20
回答 1查看 224关注 0票数 0

我的递归函数有点麻烦。我将一个包含整数的数组传递给它,然后函数将它们加或减在一起。我得到了正确的加法函数,但我很难得到正确的减法位。

下面是我注意到的: size当前设置为5。为了测试它,我将函数减法部分中的if(i == size)行更改为if(i == (size - 3)),并且它似乎正确地从第一个元素(4-2)中减去了第二个元素。但如果我让它再次运行,我得到9,而不是(4-2) -7= -5,这是我应该得到的。可能是加了一个-7吗?

而且,我真的很感谢所有的指点,但我也承认,这可能不是完成我所要做的事情的最有效的程序。我是一个初级程序员,它将帮助我看到我在当前程序中出错的地方,而不是我应该如何做我的算法。

代码语言:javascript
复制
#include<iostream>

using namespace std;


int reduceArray(int array[], int size, char op, int i = 0)
{
    if(op == '+')
    {
        if(size == 0)
        return 0;

        if(i == size)
        return 0;

        else
        { 
            return array[i++] + reduceArray(array, size, '-', i + 1);   
        }
    }

    else if(op == '-')
    {
        if(size == 0)
        return 0;

        if(i == (size - 2)) //changing this to "size - n" changes how many numbers are subtracted
        return 0;

        else
        { 
            return array[i++] - reduceArray(array, size, '-', i + 1);   
        }
    }
}

int main()
{
    int array[] = {4, 2, 7, 1, 9};

    //cout << reduceArray(array, 5, '+') << endl; this bit works fine works fine
    cout << reduceArray(array, 5, '-') << endl;
    system("pause");
    return 0;
}

编辑:实际上是--同样的事情发生在除法程序上。对于数组的第三个元素( 7),它做的是逆运算--当它应该减去时,它补充说,当它应该被除法时,它乘以--它无法弄清楚为什么会发生这种情况。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-28 01:36:02

在调用函数后立即修改i。函数返回后,i增加了一个。当您从array[i]检索值时,您正在检索错误的元素,本质上是在执行array[i + 1] =。您还将访问数组结束后的元素。

操作符的这段代码是从右到左而不是从左到右的计算,正如您所期望的。您总是在计算之前调用reduceArray,因此它一直到数组的末尾,然后开始回溯(返回),并在每次返回后执行计算。要纠正这一点,您需要在调用reduceArray之前进行计算,然后对它返回的结果执行另一个计算。

代码语言:javascript
复制
if(i < (size - 3)) // This MUST be -1 in order to go to the end of the array!
{
    // We're operating on the current array entry and the next entry.
    // this is why (size - 1) is necessary to prevent accessing beyond
    // the end of the array.
    int result = array[i] - array[i + 1];
    i += 2;
    return result - reduceArray(array, size, '-', i);
}
return array[i];

这将返回-5作为结果,这正是您所期望的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16258648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档