java - 解释循环不变量

标签 java loop-invariant

这是过去试卷中的一道题。

为什么循环不变量说i<=n当循环测试显示 i<n .

是一个合适的答案:它说 i<=n作为i将等于 n关于 while 循环的失败条件。因此 i 的第 6 次迭代将等于 n失败条件下的值 6。但是,while 循环本身声明 i<n作为i从 0 开始,将完成一次循环 i等于 5。

private int n =6;

public int fact(){
    int i = 0;
    int f = 1;

    /**loop invariant
     * 0<=i<=n
     * f=i!
     */
    while(i<n){//loop test
        i=i+1;
        f=f*i;
    }

    return f;
}

最佳答案

因为 Post-Conditioni==n当循环离开时。 Pre-Condition进入循环时是i==0 .循环内部 i正在向 n 计数.所以不变量是0 <= i <= n .

我省略了 f 的不变部分在我的解释中。这实际上还不够,因为不变量必须捕获循环的正确性和含义。

private int n = 6;

public int fact(){
    int i = 0;
    int f = 1;

    /* loop invariant: 0 <= i <= n && f == i! */
    /* PRE: i == 0 && f == i! */
    while (i < n) {
        i = i + 1;
        f = f * i;
    }
    /* POST: i == n && f == i! */

    return f;
}

关于java - 解释循环不变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12187321/

相关文章:

algorithm - 如何找到循环不变性并证明正确性?

java - 求图的最短路径并打印路由表

c - 未执行循环裂变/不变优化,为什么?

java - 为什么优化的素因子计数算法运行速度较慢

java - 验证实例与 Weka 分类器的兼容性

algorithm - 这个循环不变量是否正确?

java - 重复调用 readLine() 的循环不变性

java - 循环逻辑在 java selenium 中未按预期工作

java - 获取 LIBGDX 中的光标位置

java - NoClassDefFoundError: org/apache/commons/httpclient/HttpException 同时使用 Axis2 进行 WS 调用