【发布时间】:2015-11-20 13:34:18
【问题描述】:
首先抱歉,如果代码奇怪。按照此处的分享说明进行操作后看起来不错,但这是我的第一次。无论如何,我有一个类分配,我需要在其中创建一个递归函数,当给定一个数组时,它会返回其元素的总和。我找到了可以在线使用的解决方案,但它们似乎与我的足够相似。我的代码运行,但总和是一个巨大的整数,特别是总和输出下方的代码是 -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");
}
【问题讨论】:
-
您没有将 getSumOfElements 的递归调用分配给任何东西。同样如所写,它没有右大括号,所以当你在这里复制它时一定发生了一些事情。
-
这可能是众多问题中的一个,但如果只添加数组的firstElement和lastElement,你是如何对数组元素求和的?
-
另外,对于奇数个数组元素,您最终会计算中间项两次。您应该添加一个检查,如果 first == last,则只添加该元素一次。
-
最初 lastElement 将在您的数组之外(因为最后一个有效的数组元素位于 (# of elements in array - 1)。
-
右括号是一个错字,我修复了它,但它在我的原始程序中。感谢您指出奇怪的元素。我使用的旧代码只是简单地交换了元素,那时这不是问题。非常感谢您指出我的变量 lastElement 只需减去一个。信不信由你,我从旧代码中得到了它,但是当我显然没有想到时将其删除 xD 再次感谢大家!