我试图为此代码编写循环不变量和后置条件:
sum = 0;
for (i = 0; i < 10; ++i)
++sum;
sum = 10
是这里明显的后置条件。但是有朋友告诉我,这i = sum
也是循环不变量,sum = 12
也是后置条件。我检查了以下内容:
- 循环不变量最初是正确的:这是正确的,
i = sum
因为两者最初都是 0 - 循环不变量被保留:假设
i < 10
然后i = sum
在一次迭代之后它仍然是真的++i = ++sum
- 循环不变量意味着后置条件:假设
i >= 10
andi = sum
thensum = 12
也为真
但显然 sum 在这里不等于 12。那么我的推理有什么问题呢?