我遇到了一个问题,提出了后置条件并显示了这段代码的部分正确性。
{ m = A ≥ 0 }
x:=0; odd:=1; sum:=1;
while sum<=m do
x:=x+1; odd:=odd+2; sum:=sum+odd
end while
{ Postcondition }
我不是在寻找答案,因为这是对学校的任务,只是洞察力,也许有些指向正确的方向。我已经构造了值表,并且无法提出循环不变量。
x odd sum m (x + 1)^2 odd - x (odd - x)^2
0 1 1 30 1 1 1
1 3 4 30 4 2 4
2 5 9 30 9 3 9
3 7 16 30 16 4 16
4 9 25 30 25 5 25
5 11 36 30 36 6 36
sum = (odd - x)^2
我知道循环的结果是跟随m的完美平方,但我不知道该怎么写。
与往常一样,所有的帮助都表示赞赏。
答案 0 :(得分:2)
循环不变量是:
odd = 2x+1
sum = (x+1)^2
证明:
归纳基地:琐碎。
归纳步骤:
new_x = x+1
new_odd = odd+2 = 2(x+1)+1 = 2*new_x+1
new_sum = sum+new_odd = (x+1)^2+2(x+1)+1 = new_x^2+2*new_x+1 = (new_x+1)^2