Loops 以下代码中的循环不变量是什么
此示例代码中的循环不变量是什么。Loops 以下代码中的循环不变量是什么,loops,conditional-statements,invariants,loop-invariant,Loops,Conditional Statements,Invariants,Loop Invariant,此示例代码中的循环不变量是什么。 这是一段用C编程语言实现的摘录代码: //pre-condition m,n >= 0 x=m; y=n; z=0; while(x!=0){ if(x%2==0){ x=x/2; y=2*y; } else{ x=x-1; z=z+y; } }//post-condition z=mn 以下是我的初始答案(循环不变): y>=n x=0 我仍然不确定这一点。谢谢。您的答案确实是不变的,但很少提及循环的条件
这是一段用C编程语言实现的摘录代码:
//pre-condition m,n >= 0
x=m;
y=n;
z=0;
while(x!=0){
if(x%2==0){
x=x/2;
y=2*y;
}
else{
x=x-1;
z=z+y;
}
}//post-condition z=mn
以下是我的初始答案(循环不变):
y>=n
x=0
我仍然不确定这一点。谢谢。您的答案确实是不变的,但很少提及循环的条件。你总是需要寻找特定的不变量。在这种情况下,这很容易,因为在循环中只有两个(独占)操作 第一个
x'=x/2;y'=2*y
看起来在x*y
下是不变的
第二个x'=x-1;z'=z+y代码>不是:x'*y'=x*y-y
。但如果您再次添加z
,它将保持不变<代码>z'+x'*y'=z+y+x*y-y=z+x*y
幸运的是,第一个条件在z+x*y
下是不变的,因此我们找到了循环不变量
- 先决条件:
z+x*y=m*n
- 后置条件:
(循环条件),因此我们可以从不变量推断:x=0
z=m*n
{}
按钮来格式化代码。@Howard先生,我已经修复/更新了我的初始答案。怎么样?谢谢。但是我想问一下你是如何得出z+xy=mn的(作为一个先决条件)?m*n从何而来?@Miciah Amberong不变量是z+x*y
,而x
、y
和z
的初始值在代码中给出。