递归函数Error1

时间:2015-04-20 23:28:36

标签: c++ recursion

我正在创建一个程序,用户输入整数并反向输出。它是一个递归函数。现在的问题是它输出无穷大的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);
}

2 个答案:

答案 0 :(得分:0)

C ++不是Python。您需要用大括号括起else块,如此

else
{ // need brace here
    cout << x%10;
    printreverse(x/10);
} // and here

否则只执行else之后的第一个语句(并且最终printreverse(x/10)将始终执行,即使对于0也是如此,因此最终会溢出堆栈。)< / p>

我建议你总是把括号括起来,即使是if/else中的单个陈述,也只是出于类似于你碰到的那个原因。

答案 1 :(得分:0)

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,总是要求块来消除这样的错误。