2013-11-28 7 views
5

私は再帰関数を書こうとしていますが、行にエラーが発生しています:n + sum(n-1); 私のコンパイラはドイツ語ですので、エラーメッセージの翻訳が貧弱です: "void valueは想定通りに無視されません"。手伝ってくれてありがとう!再帰関数のエラーについて理解していますか?

void sum (int n) 
{ 
    if(n==0) 
    { 
     cout << n << endl; 
    } 
    else if(n>0) 
    { 
     n + sum(n-1); 
     cout << n << endl; 
    } 
} 

int main() 
{ 
    sum(3); 
    return 0; 
} 
+0

をあなたは 'void'関数から値を返すことはできませんそれらから戻り値を取得することはできません。 –

+0

その行は何もしないからです。 –

+0

これはかなり良い翻訳です。正確です。あなたはvoidを返す関数の戻り値を無視する(使用しない)ことになっています。 – rici

答えて

3

あなたの合計方法はvoidを返す、それはあなたがnとの和を追加しよう

int sum (int n) 
1

intに変更(N-1)が、合計は戻り値はありませんので、これは誤りです。 sumを修正してintを返し、2つのifボディにreturnステートメントを追加する必要があります。

1

"void sum"と書いたとき、sumは何も返されないことをコンパイラに伝えました。これは間違っています。 "void"をintに置き換えてみてください。

5

あなたはこの関数は、戻り値はありません

void sum (int n); 

としての機能を定義しました注意してください。しかし、このコードで:

n + sum(n-1); 

あなたはsum(n - 1)が値を生成していないため、法的ではありませんsum(n - 1)の戻り値にnを追加しようとしています。

これを修正するには、おそらく関数がintを返すように変更したいと思うでしょう。これを行うと、関数にreturn文を追加するなど、他の変更を加える必要がありますが、それは正しい軌道に乗るために役立ちます。

希望すると便利です。

2

sum()メソッドは値を返す必要があります。合計を返す必要があります。このように定義する必要があります。

int sum (int n) 
{ 
if(n==0) 
{ 
cout << n << endl; 
return 0; 
} 
else if(n>0) 
{ 
    cout << n << endl; 
    return n + sum(n-1); 
} 
} 
+0

'n + sum(n-1);は計算時間を取る以外は何もしないことを強調しなければなりません。私はあなたのexempleが実際に誤解を招くと思います。 – Johan

+0

ありがとう、私は役に立たない行を削除する答えを編集しました – slecorne

0

私はそれを得ました。私からちょっとばかげていました。もちろん、n = n + sum(n-1)でなければならない。 int関数です。 ありがとうございます。

+1

回答としてコメントを書いてはいけません。あなたを助けた答えに投票して、最も有用なものを受け入れるようにしてください。 – paddy

+0

申し訳ありませんが、これに慣れる必要があります;) – Julius

+0

問題はありません。このウェブサイトでハンドルを取得する最善の方法は、これを読むことです:http://stackoverflow.com/about – paddy

0
  • 再帰関数は、それぞれの末尾に何かを返す必要があります。
  • 再帰関数は、各再帰で問題を小さくする必要があります。ここで

それを行う方法の一例である:あなたのCコンパイラが末尾呼び出しの最適化した場合に1

int sum (int n) 
{ 
    return n == 1 ? 1 : n + sum_rec(n-1); 
} 

int main() 
{ 
    cout << sum(3) << endl; 
    return 0; 
} 

よりよい:

// just a helper for sum_it 
int sum_aux (int n, int accumulator) 
{ 
    return n == 0 ? accumulator : sum_rec(n-1, accumulator + n); 
} 

int sum_it (int n) 
{ 
    sum_aux(n, 0); 
} 
関連する問題