[英]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.