0

プログラムは実行されますが、他のものも吐き出します。その理由はよくわかりません。最初の出力は正しいですが、そこから何が起こるかわかりません。これが私のコードです:

#include <iostream>
using namespace std;

const int MAX = 10;

int sum(int arrayNum[], int n)
{
    int total = 0;
    if (n <= 0)
        return 0;
    else 
        for(int i = 0; i < MAX; i ++)
        {
            if(arrayNum[i] % 2 != 0)
                total += arrayNum[i];


        }
    cout << "Sum of odd integers in the array: " << total << endl;
    return arrayNum[0] + sum(arrayNum+1,n-1);
}


int main()
{
    int x[MAX] = {13,14,8,7,45,89,22,18,6,10};

    sum(x,MAX);

    system("pause");
    return 0;
}
4

4 に答える 4

0

nupdate を引数として再帰関数に渡していますが、内部では使用していません。

このステートメントMAXの変更n

for(int i = 0; i < n; i ++)
于 2013-05-21T05:00:42.383 に答える
0

ループを使用する場合、再帰ではありません。

一般に、計算と出力を分離することもお勧めします。

int sum(int arrayNum[], int n)
{
    if (n <= 0)    // Base case: the sum of an empty array is 0.
        return 0;
    // Recursive case: If the first number is odd, add it to the sum of the rest of the array.
    //                 Otherwise just return the sum of the rest of the array.
    if(arrayNum[0] % 2 != 0)
         return arrayNum[0] + sum(arrayNum + 1, n - 1);
    else
         return sum(arrayNum + 1, n - 1);
}

int main()
{
    int x[MAX] = {13,14,8,7,45,89,22,18,6,10};
    cout << sum(x,MAX);
}
于 2013-05-21T05:51:48.783 に答える
0

したがって、これは実際にはあなたの質問には答えませんが、役立つはずです。

したがって、コードは実際には再帰的ではありません。関数を実行すると

int total = 0; //Start a tally, good.
if (n <= 0)
    return 0;  //Check that we are not violating the array, good.

else 
    for(int i = 0; i < MAX; i ++)
    {
        if(arrayNum[i] % 2 != 0) //THIS PART IS WIERD
        total += arrayNum[i];
    }

そして、それが奇妙である理由は、あなたがその場で問題を解決しているからです。その for ループはリスト全体を実行し、とにかくすべての奇数を追加します。

再帰によって行っていることは、これを行うことです。

次の奇数の合計はいくつですか。

13,14,8,7,45,89,22,18,6,10
+
14,8,7,45,89,22,18,6
+
8,7,45,89,22,18
+
7,45,89,22 ... etc

もしそうなら、あなただけを変更する必要があります:

for(int i = 0; i < MAX; i ++)

for(int i = 0; i < n; i ++)

しかし、それ以外の場合は、この問題へのアプローチを再考する必要があります。

于 2013-05-21T05:04:34.400 に答える