这是过去的试卷中的一个问题.
当循环测试说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
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;
}