[英]C++ Digit Counting Weird Error
我有一個很奇怪的錯誤。 我有一個非常簡單的數字計數功能。 如果執行此操作,則函數將陷入無限循環:
int numOfDigits(int num, int count)
{
while(num != 0) {
count++;
numOfDigits(num/10, count);
}
return count;
}
但是它是這樣工作的:
int numOfDigits(int num, int count)
{
while(num != 0) {
count++;
num /=10;
numOfDigits(num, count);
}
return count;
}
我嘗試使用gdb,但無法弄清楚。 我正在Ubuntu 14.04上使用g ++進行編譯。
while(num != 0) {
count++;
numOfDigits(num/10, count);
}
該while循環永遠不會終止,因為num從未真正修改過。 因此,如果條件最初不是假的,它將永遠不會退出循環。
int numOfDigits(int num, int& count)
{
if(num != 0) {
count=1+numOfDigits(num/10, count);
}
return count;
}
我已將count
更改為通過引用傳遞,盡管這並不是真正需要的。 您擁有while
循環無限進行的原因,因為在該上下文中未修改num
。 您正在混合迭代和遞歸。
遞歸函數需要兩件事:
在第一個示例中,終止條件為num != 0
...但沒有@WorldSEnder指出的減少條件子句( num
完全不受影響)。
另外,遞歸中沒有禁止迭代的規則...但是,這通常會使事情變得復雜得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.