java – 解释循环不变量

这是过去的试卷中的一个问题.

当循环测试说i< n时,为什么循环不变量说i< = n. 是一个合适的答案:它说i< = n因为我将在while循环的失败条件下等于n.因此,i的第6次迭代将在失败条件下等于n值6.然而,while循环本身表示i

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;
}

最佳答案 因为当循环离开时,后置条件是i == n.进入循环时的前置条件是i == 0.在循环内部,我正朝着n计数.所以不变量是0< = i< = n. 我在我的exlanation中省略了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;
}
点赞