gpt4 book ai didi

language-agnostic - 循环终止条件

转载 作者:行者123 更新时间:2023-12-04 08:36:56 24 4
gpt4 key购买 nike

这些 for -loops 是算法形式正确性证明的第一个基本示例。它们具有不同但等效的终止条件:

1   for ( int i = 0; i != N; ++i )

2 for ( int i = 0; i < N; ++i )

差异在后置条件中变得明显:
  • 第一个给出了强有力的保证 i == N循环结束后。
  • 第二个只给出了 i >= N 的弱保证。在循环终止后,但您会很想假设 i == N .

  • 如果由于任何原因增加 ++i曾经更改为类似 i += 2 的内容,或者如果 i在循环内被修改,或者如果 N是否定的,程序可能会失败:
  • 第一个可能会陷入无限循环。它在有错误的循环中很早就失败了。调试很容易。
  • 第二个循环将终止,稍后程序可能会因为您对 i == N 的错误假设而失败。 .它可能会在远离导致错误的循环处失败,从而难以追溯。或者它可以默默地继续做一些意想不到的事情,这更糟糕。

  • 您更喜欢哪种终止条件,为什么?还有其他考虑吗?为什么很多知道这一点的程序员拒绝应用它?

    最佳答案

    我倾向于使用第二种形式,因为这样我可以更确定循环会终止。 IE。通过在循环内更改 i 来引入非终止错误更难。

    当然,它也有一个稍微懒惰的优点,那就是少了一个要输入的字符;)

    我还会争辩说,在具有合理范围规则的语言中,因为 i 在循环构造内声明,所以它不应该在循环外可用。这将减轻在循环结束时对 i 等于 N 的任何依赖......

    关于language-agnostic - 循环终止条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/132164/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com