代码之家  ›  专栏  ›  技术社区  ›  Jason Irwin

确保循环结束的机制

  •  1
  • Jason Irwin  · 技术社区  · 15 年前

    我上大学的时候,我们有一个大卫·帕纳斯的客座演讲。在本文中,他提到了一种机制,用于确保循环(while循环、for循环等)在某个点上安全地退出。他嘲笑没有人知道那是什么……可悲的是,几年后我也不知道。有人知道这个机制叫什么吗?

    4 回复  |  直到 7 年前
        1
  •  2
  •   Rafał Dowgird    15 年前

    从他的专业领域(包括正式的正确性证明)来看,我认为他指的是 loop variant 这是一种证明循环终止的通用技术。

        2
  •  2
  •   user142350    15 年前

    这个问题似乎不合逻辑。

    除了创建一个你知道会被击中的后置条件(即递增一个计数器,不要触摸循环内的计数器,并且有一个最大值让它被击中)之外,没有人能确保循环退出。

    您还可以创建一个计时器或其他结构来检查循环是否花费了太长时间。

    帕纳斯在这里暗示什么?任何循环的通用出口,不干扰逻辑或简单地设计适当的后置条件?

        3
  •  1
  •   Lasse V. Karlsen    15 年前

    有许多方法可以确保循环安全退出:

    1. 不要把它写成无穷大
    2. 其余的人被留作练习

    说真的,最好的方法是保持简单,并有一个稳定的、完全测试过的终止条件(即检查它是否应该运行另一个迭代或退出的代码)。

    你所描述的可以很好地翻译成 halting problem 这是一个众所周知的问题,没有解决方案。

    此外,谷歌搜索显示,大卫帕纳斯在利默里克大学工作,你可以打电话给他们,要求与他交谈。我相信他会很高兴你还在努力学习他当时教你的东西:)

        4
  •  1
  •   Robert Harvey    15 年前

    你的客座讲师可能是指 Cycle Detection 一种检测无限循环的方法。

    This blog post 描述在链接列表中检测无限循环。有趣的是,它使用了与维基百科文章相同的术语。