У меня проблемы с рекурсивной функцией. Я передаю в него массив, содержащий целые числа, а затем функция либо складывает, либо вычитает их все вместе. Я правильно реализовал функцию сложения, но мне трудно получить правильный бит вычитания.
Вот что я заметил: размер в настоящее время установлен на 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;
}
EDIT: На самом деле то же самое происходит и с программой разделения. Для третьего элемента массива (7) он выполняет ОБРАТНУЮ операцию — когда он должен вычитать, он складывает, когда он должен делить, он умножает — не может понять, почему это происходит.