invariant java_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

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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值