2012-03-16 60 views
4

你将如何确定一个循环是一个无限循环并且会突破它。无限循环:确定并分解无限循环

有没有人有算法或可以帮助我在这一个。

感谢

+2

我的猜测是计算机无法识别某些东西是无限循环。你必须了解它作为一名代码工程师。 – darijan 2012-03-16 14:01:41

+0

但是,如果发生这样的事情,一些智能语言编译器会理解并让你走出循环。 – 2012-03-16 14:03:23

+3

这很简单,只需等待无穷大,看看程序是否已经终止。 – aioobe 2012-03-16 14:03:43

回答

7

没有一般情况下的算法,可以确定某个程序是一个无限循环或并不适用于所有turing complete语言,这基本上是Halting Problem

证明它的想法很简单:

  1. 假设你有这样的算法A
  2. 构建一个程序B,它自己调用A [在B]。
  3. 如果A答案“程序将停止” - 做一个无限循环
  4. 别的[A答案B不会停止 - 停止immidiately

现在,假设你调用AB - 答案将会明确错误,因此A不存在。

注:以上不是正式的证明,只是它的一个简图。

+0

好吧..如果您说要遍历连接到同一行的某一点的长数据,那该怎么办。这是一个特定的停机问题,或者你有任何关联的算法来解决它? – 2012-03-16 14:07:38

+3

@PankajGupta:如果我没有弄错 - 对于每个程序'A',都有一个程序'B',可以确定是否会停止。没有**一般情况下**算法,可以确定程序是否暂停 - 对于**所有程序**。 – amit 2012-03-16 14:10:54

4

正如其他人所写,无法确定。

但是,如果您想进行一些检查,则可以使用WatchDog设计模式。 这是一个单独的线程,用于检查任务是否仍处于活动状态。你自己的线索应该定期发出一个信号,说它还活着。确保这个信号没有设置在你的(无限)循环中。

如果没有信号,则程序处于无限循环内或已停止,并且看门狗可以对其执行操作。