给出伪代码
MUL(a,b)
x=a
y=0
WHILE x>=b DO
x=x-b
y=y+1
IF x=0 THEN
RETURN(true)
ELSE
RETURN(false)
在while循环运行 n 次之后,让x(n)和y(n)表示x和y的值。
我必须通过归纳证明来证明
x(n)+ b * y(n)= a
我做了什么:
P(n):x(n)+乘(n)= a
设a和b为任意数,则第一个循环将给出x(1)= a - b和y(1)= 0 + 1 = 1
P(1):x(1)+ by(1)= a< => a = a
所以P(1)是真的。
假设P(n)为真。我们想表明P(n + 1)也是正确的。
对于步骤n + 1,循环将给出x(n + 1)= x(n)-b和y(n + 1)= y(n)+ 1
P(n + 1):x(n + 1)+乘以(n + 1)= a< => x(n)+ by(n)= a
假设P(n)为真,则P(n + 1)也为真,证明完成。
我的问题:由于这是我第一次在伪码上使用归纳证明,我不知道该怎么做。我只是想知道这是否是解决问题的正确方法,如果不是,该过程应该是什么样的?
由于
答案 0 :(得分:0)
当你在问题中(几乎)得到它时,回答这个感觉就像是矫枉过正,但无论如何我都会这样做:
你的方法很好,虽然你不应该忽略根本没有执行循环迭代的情况,这是 a< b 并对应于 P 0 。如果你证明 P 1 为真,那么当 P P n + 1 为真> n 是真的,你没有说 P 0 。
因此,通过这种轻微的修改,通过归纳法推导证明如下:
将 P n 定义为执行循环 n 迭代后表达式x + b*y
的值:
P n :x n + b.y n = a
要证明 P n 对于所有 n> = 0
是真的请注意,这是一种可能的情况:当首次评估while循环的条件时,尚未执行任何迭代,因此 n 为0,但我们确实有两个值播放时的变量: x 0 和 y 0 。
循环的前置条件由循环之前的赋值语句决定:
x=a
y=0
所以我们有:
P 0 :x 0 + by 0 = a + b.0 = a
这里我们假设 P n 对于给定的 n 是真的:
P n :x n + b.y n = a
这是启动循环的下一次迭代时的前置条件,其中执行以下语句:
x=x-b
y=y+1
通过替换,我们获得该特定迭代的后置条件,根据定义, P n + 1 :
P n + 1 :( x n - b)+ b。(y n + 1)= x < sub> n + by n = P n = a