У меня проблемы с рекурсивной функцией. Я передаю массив, содержащий целые числа в нем, тогда функция либо добавляет, либо вычитает их все вместе. Я получил функцию добавления, реализованную правильно, но мне трудно получить правильное значение бита вычитания.Небольшая проблема в рекурсивной программе массивов
Вот что я заметил: размер в настоящее время установлен на 5. Для его проверки я изменяю строку if (i == size) в части вычитания функции, если (i == (размер - 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) он выполняет операцию INVERSE - когда она должна вычитать, она добавляет, когда она должна делиться, она умножается - не может понять, почему это происходит.
Имеет смысл. Я отредактировал свой код соответствующим образом, но я все равно получаю одинаковые результаты. Он запускается правильно - сначала я получаю 4, затем он вычитает 2, и я получаю 2, но вместо этого вместо вычитания 7 (следующий элемент в массиве) кажется, что он добавляет его, потому что вместо этого я получаю 9 вместо от -7. – user2302335
Когда 'reduceArray' возвращает отрицательное число, вы вычтите его из числа в массиве. '1 - -5 = 6 ', поэтому он _looks_, как будто вы добавляете число. –
Как я мог исправить это? abs() возможно? – user2302335