簡體   English   中英

C ++數字計數怪異錯誤

[英]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 您正在混合迭代和遞歸。

遞歸函數需要兩件事:

  1. 終止條件
  2. 歸約條款

在第一個示例中,終止條件為num != 0 ...但沒有@WorldSEnder指出的減少條件子句( num完全不受影響)。

另外,遞歸中沒有禁止迭代的規則...但是,這通常會使事情變得復雜得多。

暫無
暫無

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

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