Algorithm 无限循环:确定和打破无限循环
你如何确定一个循环是一个无限循环,并将打破它 有没有人有算法或者可以在这方面帮助我Algorithm 无限循环:确定和打破无限循环,algorithm,loops,infinite-loop,infinite,Algorithm,Loops,Infinite Loop,Infinite,你如何确定一个循环是一个无限循环,并将打破它 有没有人有算法或者可以在这方面帮助我 感谢对于每种语言,没有通用的case算法可以确定程序是否处于无限循环中,这基本上是最简单的 证明它的想法很简单: 假设您有这样一个算法A 构建一个程序B,在自身上[在B上]调用a 如果A回答“程序将停止”-执行无限循环 否则[AanswersB不会停止]-立即停止 现在,假设您在B上调用A——答案肯定是错误的,因此A不存在 注意:以上不是一个正式的证明,只是它的一个草图。正如其他人所写,它无法确定 但是,如果您想
感谢对于每种语言,没有通用的case算法可以确定程序是否处于无限循环中,这基本上是最简单的 证明它的想法很简单:
A
B
,在自身上[在B
上]调用a
A
回答“程序将停止”-执行无限循环A
answersB
不会停止]-立即停止B
上调用A
——答案肯定是错误的,因此A
不存在
注意:以上不是一个正式的证明,只是它的一个草图。正如其他人所写,它无法确定 但是,如果您想进行一些检查,可以使用看门狗设计模式。 这是一个单独的线程,用于检查任务是否仍处于活动状态。你自己的线程应该定期发出信号说它是活动的。确保此信号未设置在(无限)循环内
如果没有信号,程序就在无限循环中,或者已经停止,看门狗可以对其进行操作。我的猜测是,计算机无法确定某个东西是无限循环。作为一名代码工程师,你必须意识到这一点。但如果发生这种情况,一些智能语言编译器会理解并让你脱离循环。很简单,只要等待无穷远,看看程序是否已终止。虽然我认为@amit下面的响应在逻辑上并不有效,我也不认为总是存在一种方法来确定某个东西是否会无限循环。例如,您总是可以构造一个函数,其极限(对于某些参数值)只能通过数值计算,因此您必须执行计算,以判断是否会出现某种最终情况(以及循环是否会以某种方式执行)。在特殊情况下,可以通过分析或循环试验轻松地进行确定……好的……如果说您要遍历连接到同一行某个点的长数据行,该怎么办。这是一个暂停问题的特殊情况,还是你有任何相关的算法来解决它?@PankajGupta:如果我没有弄错的话-对于每个程序
a
,都有一个程序B
,可以确定a
是否会暂停。对于所有程序,没有通用的case算法可以确定程序是否停止。