我试图找到循环的不变量(例如在下面的代码中)我真的不知道如何找到一般的不变量。任何人都可以帮助我如何找到一个不变量,并帮助我找到它的以下代码?谢谢
public static int div(int a, int b)
{
int q = 0;
while(a >= b)
{
a -= b;
q++;
}
return q;
}
我试图找到循环的不变量(例如在下面的代码中)我真的不知道如何找到一般的不变量。任何人都可以帮助我如何找到一个不变量,并帮助我找到它的以下代码?谢谢
public static int div(int a, int b)
{
int q = 0;
while(a >= b)
{
a -= b;
q++;
}
return q;
}
关于循环不变量,首先要注意的是它们有很多。其中一些更有用,而另一些则不太有用。由于不变量用于证明程序的正确性,因此选择不变量取决于您要证明的内容。
例如,q >= 0
是循环的不变量。如果你想证明函数返回一个正数,这就是你所需要的。如果你想证明更复杂的东西,你需要一个不同的不变量。
由于 Java 中的参数是按值传递的,而且由于程序会修改参数的值,所以a
我们用a0
来表示参数的初始值a
。现在您可以编写以下不变量表达式:
a == a0 - (b * q)
您通过观察每次q
增加,a
也减少了来得出这个不变量b
。在循环的每次迭代中, Soa0
减少了b
精确q
的次数。
这个不变量可以用来证明循环产生q == a0 / b
,并且 的结束值a
等于a0 % b
。
循环不变量是对循环的每次迭代都成立的某些条件。
在您的循环中,谓词q >= 0
是循环不变量,因为它始终为真。分析循环不变量的需要是,当你退出循环时,循环不变量和循环终止条件都可以得到保证。因此,在您退出循环时,我们可以确定q >= 0
and a < b
。
循环不变量是对循环的每次迭代都成立的某些条件。
在您的情况下,一个不变量是:
q >= 0