Algorithm 算法返回的形式化证明
我需要正式证明下面的算法在n=1时返回1,在其他情况下返回0Algorithm 算法返回的形式化证明,algorithm,fibonacci,proof,Algorithm,Fibonacci,Proof,我需要正式证明下面的算法在n=1时返回1,在其他情况下返回0 function K( n: word): word; begin if (n < 2) then K := n else K := K(n − 1) * K(n − 2); end; 函数K(n:word):word; 开始 如果(n1的情况,我们可以通过归纳法解决: Base:对于n=2,我们得到:K(2)=K(1)*K(0)=1*0=0 对于n=3,我们得到:K(3)=K(2)*K(1)=0*1=0注意K(2
function K( n: word): word;
begin
if (n < 2) then K := n
else K := K(n − 1) * K(n − 2);
end;
函数K(n:word):word;
开始
如果(n<2),则K:=n
否则K:=K(n)− 1) *K(n)− 2);
终止
有人能帮忙吗?感谢通过调用算法,得到
n=1
答案是K=n=1
,因此我们已经完成了该案例。
对于
n=0
,根据定义,K(0)=0
对于n>1
的情况,我们可以通过归纳法解决:
Base:对于n=2
,我们得到:K(2)=K(1)*K(0)=1*0=0
对于
n=3
,我们得到:K(3)=K(2)*K(1)=0*1=0
注意K(2)=0
,因为我们只显示了一行。
索赔:对于任何
11
请注意,该声明适用于非负数,例如,如果允许n=-5
,则得到K(-5)=-5
——这是声明的反例。假设n=0
。由于0<2
我们得到了0
说n=1
。由于1<2
我们得到了1
说n=2。K(2)=K(1)*K(0)
。因为K(0)=0
我们得到了0
对于n>2
现在我们假设关于算法的陈述为真,即K(n)=0
。
现在让我们来说明n+1
也是如此:
K(n+1)=K(n)*K(n-1)
。由于K(n)=0
很明显,K(n)*K(n-1)=0
这可以通过归纳法来证明,但正如之前的海报所示,在证明中直接引用K
时,很难获得形式上的正确性
我的建议是:让p(n)成为我们想要展示的属性:
p(n)保持iff K(n)对n=1产生1,对n产生0≠ 一,
现在,我们可以清楚地表达我们想要展示的内容:Ɐn、 P(n)
基本情况:n&leq;二,
通过案例分析进行简单检查:
p(0)是可以的,因为K(0)=0
P(1)是可以的,因为K(1)=1
归纳假设:
所有2&leq的p(n)保持不变;n
归纳步骤:表明p(c)保持不变
根据K的定义,我们有K(c)=K(c-1)×K(c-2)
通过归纳假设,我们知道P(c-1)和P(c-2)成立
由于K(c-1)和K(c-2)中最多有一个可以为1(另一个必须为0),因此乘积为0
这意味着P(c)保持不变
Qed。你自己试过什么吗?我试过了,但做不到。我会试试的。给我几分钟。我假设n>=0
是一个先决条件。我想你可以用归纳法来证明这一点,递归非常适合归纳法。归纳法假设到底是什么?@aioobe对于任何一个1,如果n>2,你刚才证明斐波那契是0?@GiorgiNakeuri这不是斐波那契,斐波那契是f(n-1)+(n-2)
,不f(n-1)*f(n-2)
,并且具有不同的基本子句。你读过斐波那契的问题/答案/定义吗?哦,对不起,我没注意到,看了问题上的标签