循环 – 如何找到循环不变量

我知道循环不变量是为了证明问题的正确性,但我无法理解如何提出问题,无论问题多么微不足道.这是一个例子,有人可以指出我应该考虑提出一个步骤.我知道循环中正在改变的所有值必须涉及我的不变量.请指导我这个问题,我也必须找到后置条件.解释不仅仅是一个答案;请帮忙.

{M > 0 and N >= 0 }

a = M;
b = N;
k = 1;

while (b > 0) {
    if (b % 2 == 0) {
        a = a * a;
        b = b / 2
    } else {
        b = b – 1;
        k = k * a;
    }
}

{ ? ? }

最佳答案 关于循环不变量的棘手部分是没有算法(我知道)将始终保证“正确”的答案.

首先,对于您问题中的算法,尝试跟踪程序并找出算法的目标(提示:指数很有趣).跟踪跟踪变量a,b和k.

例如,使用M = 2和N = 1,2,3,….在N的几个值之后,您将注意到变量a,b和k之间将开始形成关系.

一旦你弄清楚循环不变,后置条件应该很容易想出来.

希望这会让你的球滚滚而来!

点赞