我在使用递归函数时遇到了一些麻烦。我将一个包含整数的数组传递给它,然后该函数将它们全部相加或相减。我正确实现了加法功能,但我很难正确地得到减法位。
这是我注意到的:size 当前设置为 5。为了测试它,我将函数减法部分中的 if(i == size) 行更改为 if(i == (size - 3)),并且它似乎从第一个元素(4 - 2)中正确减去了第二个元素。但是如果我让它再次运行,我会得到 9,而不是我应该得到的 (4-2) - 7 = -5。是不是加了-7?
另外,我真的很感谢所有的指点,但我也承认这可能不是完成我想做的最有效的程序。我是一名初级程序员,这对我最有帮助的是了解我在当前程序中出了什么问题,而不是我应该如何完成我的算法。
#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 个),它正在执行 INVERSE 操作——当它应该减去时,它会添加,当它应该除法时,它会相乘——无法弄清楚为什么会发生这种情况。