而循环-C++数字计数的怪异错误

while loop - C++ Digit Counting Weird Error

本文关键字:错误 字计数 循环 -C++ 数字      更新时间:2023-10-16

我有一个非常奇怪的错误。我有一个非常简单的数字计数功能。如果我这样做,函数将进入无限循环:

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实际上从未被修改过。因此,如果条件一开始不是false,它将永远不会退出循环。

int numOfDigits(int num, int& count)
{
    if(num != 0) {
        count=1+numOfDigits(num/10, count);
    }
    return count;
}

我已经将count更改为通过引用传递,尽管它并不是真正需要的。由于num在该上下文中未被修改,因此while循环将无限继续。您正在混合迭代和递归。

递归函数需要两件事:

  1. 终止条件
  2. 减少条款

在第一个示例中,您有终止条件num != 0。。。但不是@WorldSEnder指出的减少条款(num完全不受影响)。

此外,递归中没有反对迭代的规则。。。但它通常会使事情变得比应该的更复杂。