Мне трудно правильно определить инвариант цикла для следующей функции:
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.
Вот где мое замешательство действительно, я думаю. В некоторых книжных статьях утверждается, что инвариант цикла — это оператор, который должен быть равен true в начале или цикле (таким образом, предварительное условие), а также должен оставаться истинным в конце цикла (таким образом, постусловие), но не обязательно должен быть истинным. удерживайте истину на полпути через цикл.
Каков правильный инвариант цикла для приведенной выше функции?