而循环-C++数字计数的怪异错误
while loop - 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实际上从未被修改过。因此,如果条件一开始不是false,它将永远不会退出循环。
int numOfDigits(int num, int& count)
{
if(num != 0) {
count=1+numOfDigits(num/10, count);
}
return count;
}
我已经将count
更改为通过引用传递,尽管它并不是真正需要的。由于num
在该上下文中未被修改,因此while
循环将无限继续。您正在混合迭代和递归。
递归函数需要两件事:
- 终止条件
- 减少条款
在第一个示例中,您有终止条件num != 0
。。。但不是@WorldSEnder指出的减少条款(num
完全不受影响)。
此外,递归中没有反对迭代的规则。。。但它通常会使事情变得比应该的更复杂。
相关文章:
- 我的字符计数代码计算错误.为什么
- 我是 c++ 的新手.学习基本知识后,我想做井字游戏.对于印刷板,我在下面写代码,但它显示错误
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- 当我从下面的代码中删除关键字 virtual 时,它可以正常工作,否则会出现错误。在这里"virtual"字的意义是什么?
- 声明为无效的变量或字段'...' Ardunio 编译器上的错误
- 当客户端在 write() 期间终止连接时,由对等套接字错误重置连接
- 我正在尝试一个傻瓜 C++ 练习,我遇到了一个错误,说类 'GraduateStudent' 没有任何名为 'advisor' 的字段
- 我可以写入关闭的套接字并强制纠正损坏的管道错误吗?
- 合并排序中的错误计数:计数反转
- 错误:字段'dateOfBirth'的类型不完整'Poco::Data::Date'
- 一个非常简单的win32套接字代码,但工作错误
- 类定义错误 - 字段下一个具有不完整的类型
- G++ 错误:字段的类型不完整
- 用户定义的函数在 C++ 中返回错误的计数
- 错误:字段在C++中具有不完整的类型
- 对象数组参数 - 错误:字段“字母”的类型不完整
- 并行字计数
- C++类相互引用( => 错误 + 字段"..."类型不完整)
- 错误:字段“m_ssmmap”具有不完整的C++类型
- 结构定义错误:字段' myaiocb '类型不完整