Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 无限循环:确定和打破无限循环_Algorithm_Loops_Infinite Loop_Infinite - Fatal编程技术网

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
    answers
    B
    不会停止]-立即停止
  • 现在,假设您在
    B
    上调用
    A
    ——答案肯定是错误的,因此
    A
    不存在


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

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

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


    如果没有信号,程序就在无限循环中,或者已经停止,看门狗可以对其进行操作。

    我的猜测是,计算机无法确定某个东西是无限循环。作为一名代码工程师,你必须意识到这一点。但如果发生这种情况,一些智能语言编译器会理解并让你脱离循环。很简单,只要等待无穷远,看看程序是否已终止。虽然我认为@amit下面的响应在逻辑上并不有效,我也不认为总是存在一种方法来确定某个东西是否会无限循环。例如,您总是可以构造一个函数,其极限(对于某些参数值)只能通过数值计算,因此您必须执行计算,以判断是否会出现某种最终情况(以及循环是否会以某种方式执行)。在特殊情况下,可以通过分析或循环试验轻松地进行确定……好的……如果说您要遍历连接到同一行某个点的长数据行,该怎么办。这是一个暂停问题的特殊情况,还是你有任何相关的算法来解决它?@PankajGupta:如果我没有弄错的话-对于每个程序
    a
    ,都有一个程序
    B
    ,可以确定
    a
    是否会暂停。对于所有程序,没有通用的case算法可以确定程序是否停止。