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