我知道循环不变量是为了证明问题的正确性,但我无法理解如何提出问题,无论问题多么微不足道.这是一个例子,有人可以指出我应该考虑提出一个步骤.我知道循环中正在改变的所有值必须涉及我的不变量.请指导我这个问题,我也必须找到后置条件.解释不仅仅是一个答案;请帮忙.
{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之间将开始形成关系.
一旦你弄清楚循环不变,后置条件应该很容易想出来.
希望这会让你的球滚滚而来!