В настоящее время я застрял в циклическом доказательстве в моем домашнем задании. Алгоритм, который мне нужен, чтобы доказать правильность, таков:
Multiply(a,b)
x=a
y=0
WHILE x>=b DO
x=x-b
y=y+1
IF x=0 THEN
RETURN(y)
ELSE
RETURN(-1)
Я попытался взглянуть на несколько примеров инвариантов цикла, и у меня есть некоторое представление о том, как это должно сработать. Однако в приведенном выше алгоритме у меня есть два условия выхода, и я немного растерялся, как подойти к этому в циклически-инвариантном доказательстве. В частности, это часть завершения, с которой я борюсь, вокруг операторов IF и ELSE.
Пока что я построил, просто посмотрев на завершение алгоритма, и в случае, если x = 0
, то он возвращает значение y
, содержащее значение n
(количество итераций в то время как loop), где как будто x
не равно 0
, а x < b
, тогда возвращается -1
. У меня просто такое чувство, что мне нужно как-то это доказать.
Я надеюсь, что кто-то может помочь мне осветить это, поскольку подобных случаев, которые я обнаружил здесь, было недостаточно.
Заранее большое спасибо за ваше время.