我很难正确识别以下函数的循环不变量:
F(y)
X <-- 1
while (y > 1)
do x <-- x * y
y <-- y - 1
return (x)
我已经确定循环不变量是x = 1 OR x = y!
因为该语句作为前置条件成立并且作为后置条件成立。
它似乎并不适用于每次迭代,例如如果 y = 3,那么在循环的第一次迭代中,x = 1 * 3 等于 3 而不是 3!相当于 6。
我想这就是我真正困惑的地方。一些书籍文章指出,循环不变量是在开始或循环时必须等于真(因此是前置条件)并且在循环结束时也必须为真(因此是后置条件)但不一定需要的语句在循环的中途保持真实。
上述函数的正确循环不变量是什么?