int logarithmCeiling(int x) {
int power = 1;
int count = 0;
while (power < x) {
power = 2 *power;
count = count +1;
}
return count;
}
上面的代码是Java中用于计算并使用while循环返回给定正整数的较低对数的方法。我如何为上面的循环提供不变量?即每次循环体结束时,它在开始之前保持,以及循环条件的否定。
答案 0 :(得分:1)
电源总是等于循环开始和结束时的2 ^计数。对于否定,当循环结束时,x <= power = 2 ^ count。
答案 1 :(得分:0)
power
的值与count
的值之间存在简单的关系:power = 2 count 。这保持在循环的开始和结束,但不在循环体中的某些位置。
答案 2 :(得分:0)
查找始终为真的变量或条件。每个迭代计数总是递增1,并且幂总是乘以2.因为函数的目的是找到给定参数的较低对数,你可以说循环不变量是count总是等于对数的x,向下舍入。另一个是计数总是等于幂的对数。
答案 3 :(得分:0)
我猜你正在寻找一种适用于证明方法部分正确性的不变量?否则“true”或“false”总是不变量。我会选择这样的东西:
I: {(power <= x) AND (power == 2 ^ count) AND (x > 2 ^ count -1) AND (power >= 1)}
r.h.s.可以从初始化中隐含,并有助于确保x的下限。 与否定的循环条件一起,您可以在以后暗示。
{(x <= 2 ^ count) AND (x > 2 ^ (count -1))}
这正是您想要显示整个函数的部分正确性。