递归函数错误 1.

Recursive Function Error1

本文关键字:错误 递归函数      更新时间:2023-10-16

我正在制作一个程序,用户输入整数并反向输出它们。它是一个递归函数。现在的问题是它输出无限的 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中的单个语句,正是出于与您刚刚遇到的原因类似的原因。