我的C ++递归函数有什么问题?

约书亚(JoshuaRG)1993

首先,对不起,如果代码出来很奇怪。按照此处的共享说明进行操作后看起来不错,但这是我第一次。无论如何,我都有一个类分配,需要在其中创建一个递归函数,当给定一个数组时,该递归函数将返回其元素的总和。我已经找到了可以在网上使用的解决方案,但它们看起来与我的相似。我的代码运行,但是总和以一个巨大的整数形式出现,特别是总和输出下方的代码为-858993459。我之前也看过类似的东西,但我尝试过可能是一个常见的错误,但至少没有找到任何东西。请帮忙解释发生了什么,我想使用设置的参数(我已经以其他方式看到过),因为我希望我的代码至少是唯一的。预先感谢大家!

    #include <iostream>
    #include <array>
    #include <string>
    using namespace std;

    int getSumOfElements(int intArray[], int firstElement, int lastElement, int sum) {
    if (firstElement > lastElement)
        return sum;
    else {
        sum += intArray[firstElement] + intArray[lastElement];
        getSumOfElements(intArray, firstElement + 1, lastElement - 1, sum);
        }
    }

    int main()
    {
        int sum = 0, lastElement, firstElement = 0;
        int exampleArray1[] = { 1, 5, 6, 12, 7 }, exampleArray2[] = { 3, -5, -16, 4, 10, 1, 7 };

        lastElement = sizeof(exampleArray1) / sizeof(exampleArray1[0]);
        sum = getSumOfElements(exampleArray1, firstElement, lastElement, sum);
        cout << "The sum of all elements in Array1 are " << sum << endl;

        lastElement = sizeof(exampleArray2) / sizeof(exampleArray2[0]);
        sum = getSumOfElements(exampleArray2, firstElement, lastElement, sum);
        cout << "The sum of all elements in Array2 are " << sum << endl;

        system("pause");
   }
詹萨

您正在数组外建立索引。

int lastElement = sizeof(exampleArray1) / sizeof(exampleArray1[0]);
sum = getSumOfElements(exampleArray1, firstElement, lastElement, sum);

然后你做

sum += intArray[firstElement] + intArray[lastElement];

在第一次调用期间,lastElement将在数组外部进行索引。你应该做

sum = getSumOfElements(exampleArray1, firstElement, lastElement - 1, sum);

这就是为什么您会得到像-858993459这样的“怪异”整数值的原因。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章