我知道循环不变量是为了证明问题的正确性,但我无法理解如何提出问题,无论问题多么微不足道。这是一个例子,有人可以指出我应该考虑提出一个步骤。我知道循环中正在改变的所有值必须涉及我的不变量。请指导我这个问题,我也必须找到后置条件。解释不仅仅是一个答案;请帮忙。
{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;
}
}
{ ? ? }
答案 0 :(得分:1)
关于循环不变量的棘手部分是没有算法(我意识到)将始终保证"正确"答案。
首先,对于你问题中的算法,尝试遍历程序并找出算法的目标(提示:指数很有趣)。跟踪跟踪变量a,b和k。
例如,使用M = 2
和N = 1,2,3,...
。在几个N值之后,您会注意到变量a,b和k之间的关系将开始发展。
一旦你弄清楚循环不变,后置条件应该很容易想出来。
希望这能为你赢得胜利!
答案 1 :(得分:0)
那么......程序是什么?你怎么知道这是对的?循环不变量将是你对第二个问题的答案的一部分。
它听起来像这样:在每次迭代的开始和结束时,k = ...... b ....在循环之后,b == 0,所以....,因此程序是正确的。
我不想拼出答案,因为这可能是家庭作业,如果你自己弄明白的话,你只会学习它。