我正在修改算法为我的考试,我试图解决这个练习,但我不能想出一个解决方案。 这是伪代码。 1. int search (int [] a, int x) {
2. // Pre: ∃i:Nat (0≤i<a.length ∧ a[i]=x) ∧ a is in ascending order
3. // Post: 0≤ r≤ a.length ∧
4. // ∀i:int.(0 ≤ i <
我在看Hoare Logic,并且在理解找到循环不变的方法时遇到了问题。 有人可以解释用于计算循环不变的方法吗? 什么循环不变应该包含一个“有用”的? 我只处理简单的例子,发现不变量并证明部分和完全校正的例子,如: { i ≥ 0 } while i > 0 do i := i−1 { i = 0 }
int logarithmCeiling(int x) {
int power = 1;
int count = 0;
while (power < x) {
power = 2 *power;
count = count +1;
}
return count;
}
上面的代码是为了使用while循环计算并返回给定正