再帰関数に少し問題があります。整数を含む配列を渡すと、関数はそれらをすべて加算または減算します。加算機能は正しく実装されましたが、減算ビットを正しく取得するのに苦労しています。
これが私が気づいたことです: size は現在 5 に設定されています。それをテストするために、関数の減算部分の if(i == size) 行を if(i == (size - 3)) に変更し、最初の要素から 2 番目の要素を正しく減算しているように見えます (4 - 2)。しかし、もう一度実行すると、(4-2) - 7 = -5 の代わりに 9 が得られます。おそらく-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;
}
編集:実際には、部門プログラムでも同じことが起こります。配列の 3 番目の要素 (7) については、INVERSE 演算を実行しています。減算する必要がある場合は加算し、除算する必要がある場合は乗算します。なぜこれが起こっているのかわかりません。