递归函数错误 1.
Recursive Function Error1
我正在制作一个程序,用户输入整数并反向输出它们。它是一个递归函数。现在的问题是它输出无限的 0。请告诉我我的代码中的错误在哪里。我需要一些指示。请帮忙。
#include <iostream>
using namespace std;
void printreverse(int);
int main()
{
int x;
cout << "Enter numbers: ";
cin >> x;
printreverse(x);
return 0;
}
void printreverse(int x)
{
if(x<10)
cout << x;
else
cout << x%10;
printreverse(x/10);
}
您在printreverse
中缩进错误。它应该是这样的:
void printreverse(int x)
{
if(x<10)
cout << x;
else
cout << x%10;
printreverse(x/10);
}
首先它打印 x 或 x%10,然后递归,不管x
是什么。如果您希望在结果或替代中完成多个语句,则需要使用块。块在C-decendants中用{}
表示。它们是如此常见,以至于有些人实际上认为条件和控制流语法需要它们。无论如何,如果缩进是预期的行为,您应该这样写:
void printreverse(int x)
{
if(x<10) {
cout << x;
} else {
cout << x%10;
printreverse(x/10);
}
}
每当我在if
中的一个术语上使用大括号时,即使不是真正需要,我也会为每个术语添加大括号。一些编码标准,如PSR2,要求块始终消除出现此类错误的机会。
C++不是Python。您需要用大括号包围else
块,如下所示
else
{ // need brace here
cout << x%10;
printreverse(x/10);
} // and here
否则只执行else
后的第一个语句(并且最终printreverse(x/10)
将始终执行,即使是0
,所以你最终会溢出堆栈)。
我建议您始终添加大括号,即使是if/else
中的单个语句,正是出于与您刚刚遇到的原因类似的原因。
相关文章:
- 任何人都可以查明我的递归函数中的错误吗?
- 如何修复递归函数导致的堆栈溢出错误?C++
- 使用递归函数 (c++) 将长字符串转换为整数时输出错误
- 我在具有递归函数的这部分代码中收到此错误
- 为什么当从递归函数返回字符串到C 中的Main时,我会得到分割错误
- 递归函数在数组中找到第一个错误
- 递归函数错误 1.
- 静态短引用在递归函数中产生错误
- 理解递归函数中的错误
- 递归函数调用时block_type_is_valid错误
- 我的二进制搜索树 c++ 的递归函数中的错误 C2784 无法推断模板参数
- 递归函数错误 Dev-C++
- 在递归函数中使用迭代器会导致分段错误
- 递归函数错误
- 递归C++函数中的堆栈溢出错误
- 递归函数中迭代器的 Seg 错误
- 递归函数导致返回错误 (c++)
- 字符串递归函数中的字符串错误
- 在另一个类的函数中返回一个类,反之亦然,编译错误(递归)
- 递归函数中的分段错误