理解递归函数中的错误
Understanding an error in a recursive function?
我正试图编写一个递归函数,但在行中出现错误:n+sum(n-1);我的编译器是德语,所以错误消息的糟糕翻译是:"无效值没有按预期忽略"。谢谢你的帮助!
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;
}
注意,您已经将函数定义为
void sum (int n);
此函数没有返回值。然而,在这个代码中:
n + sum(n-1);
您正试图将n
添加到sum(n - 1)
的返回值中,这是不合法的,因为sum(n - 1)
不会产生值。
要解决此问题,您可能需要更改函数,使其返回int
。如果您这样做,您将需要进行其他更改,例如在函数中添加return语句,但这将有助于您步入正轨。
希望这能有所帮助!
您的sum方法返回void,将其更改为int
int sum (int n)
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);
}
}
您尝试将n和sum(n-1)相加,但sum没有返回值,因此这是一个错误。您应该修改sum以返回int,并在两个if体中添加return语句。
当您编写"void sum"时,您告诉编译器sum不会返回任何内容。这是错误的。尝试用int.
我明白了。我有点傻。它当然必须是n=n+sum(n-1);还有一个int函数。谢谢大家。
- 递归函数需要在每个尾部位置返回一些东西
- 递归函数需要在每次递归时使问题变小
以下是如何做到这一点的一个例子:
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);
}
相关文章:
- 任何人都可以查明我的递归函数中的错误吗?
- 如何修复递归函数导致的堆栈溢出错误?C++
- 使用递归函数 (c++) 将长字符串转换为整数时输出错误
- 我在具有递归函数的这部分代码中收到此错误
- 为什么当从递归函数返回字符串到C 中的Main时,我会得到分割错误
- 递归函数在数组中找到第一个错误
- 递归函数错误 1.
- 静态短引用在递归函数中产生错误
- 理解递归函数中的错误
- 递归函数调用时block_type_is_valid错误
- 我的二进制搜索树 c++ 的递归函数中的错误 C2784 无法推断模板参数
- 递归函数错误 Dev-C++
- 在递归函数中使用迭代器会导致分段错误
- 递归函数错误
- 递归C++函数中的堆栈溢出错误
- 递归函数中迭代器的 Seg 错误
- 递归函数导致返回错误 (c++)
- 字符串递归函数中的字符串错误
- 在另一个类的函数中返回一个类,反之亦然,编译错误(递归)
- 递归函数中的分段错误