簡體   English   中英

遞歸函數錯誤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);
}

C ++不是Python。 您需要用大括號將else塊包圍,就像這樣

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

否則,將僅執行else后面的第一個語句(並且始終會執行最終的printreverse(x/10) ,即使是0 ,也將導致堆棧溢出)。

我建議您始終將括號括起來,即使對於if/else的單個語句,也正是出於與您剛碰到的類似的原因。

您在printreverse中printreverse錯誤。 應該是這樣的:

void printreverse(int x)
{
    if(x<10)
        cout << x;
    else
        cout << x%10;

    printreverse(x/10);
}

首先,它打印x或x%10,然后不管x是什么都重復遞歸。 如果要在結果或替代方案中完成多個語句,則需要使用一個塊。 C分支中的塊用{}表示。 它們是如此常見,以至於有些人實際上認為條件和控制流語法需要它們。 無論如何,如果標識是預期的行為,則應將其編寫為:

void printreverse(int x)
{
    if(x<10) {
        cout << x;
    } else {
        cout << x%10;
        printreverse(x/10);
    }
}

每當我在使用大括號上一個學期if我加入他們,即使不是真正需要它的每一個。 某些編碼標准(例如PSR2)始終要求使用塊,以消除出現此類錯誤的機會。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM