我正在尝试编写一个递归函数,但在行中出错: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 :(得分:5)
请注意,您已将该功能定义为
void sum (int n);
此功能没有返回值。但是,在此代码中:
n + sum(n-1);
您正尝试将n
添加到sum(n - 1)
的返回值,这不合法,因为sum(n - 1)
不会产生值。
要解决此问题,您可能需要更改该函数,以便返回int
。如果你这样做,你需要进行其他更改,例如在函数中添加return语句,但它应该有助于你走上正确的轨道。
希望这有帮助!
答案 1 :(得分:3)
你的sum方法返回void,将其改为int
int sum (int n)
答案 2 :(得分: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);
}
}
答案 3 :(得分:1)
您尝试添加n和sum(n-1),但sum没有返回值,因此这是一个错误。您应该修改sum以返回int,并在两个if实体中添加return语句。
答案 4 :(得分:1)
当你写“无效总和”时,你告诉编译器总和不会返回任何东西。这是错的。尝试用int替换“void”。
答案 5 :(得分:0)
我明白了。对我来说有点愚蠢。它当然必须是n = n + sum(n-1); 和一个int函数。 多谢你们。
答案 6 :(得分:0)
以下是如何执行此操作的一个示例:
int sum (int n)
{
return n == 1 ? 1 : n + sum_rec(n-1);
}
int main()
{
cout << sum(3) << endl;
return 0;
}
如果C编译器执行尾调用优化,则更好一个:
// 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);
}