【问题标题】:Proof of Loop Invariant and Algorithm循环不变性和算法的证明
【发布时间】:2023-09-09 20:35:01
【问题描述】:

如何获得循环不变量并为以下算法证明它。

power(x,y):
   z = 1
   m = 0
   while m < y:
       z = z*x
       m = m+1
   return z

【问题讨论】:

  • 简单——你的函数总是返回 0...很容易证明。修复您的代码,以便我们为您提供帮助。
  • 抱歉这个拼写错误。

标签: proof invariants loop-invariant


【解决方案1】:

首先,我认为您的意思是 z = z*x 要显示任何给定循环的循环不变性,您必须提出一个在任何迭代的开始和结束时都不会改变的语句。使用该不变量,您将证明当程序终止时,函数可以工作。 你的函数能力基本上是在尝试做 x^y。

让我们构造一个循环不变量:Z = x^m。 您可以看到在循环的开始和结束时都是如此。

你也知道循环只能在 not(m=y, or m=y.

所以如果 Z=x^m,并且在终止时 m = y。那么 Z = x^y。

所以我们可以看到这个程序是部分正确的。

【讨论】:

    最近更新 更多