我需要正式证明以下算法在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;
有人可以帮忙吗?谢谢
答案 0 :(得分:1)
这可以通过归纳来证明,但正如之前的海报所示,在证明中直接引用K
时,正式提出是正确的。
以下是我的建议:让 P ( n )成为我们想要展示的属性:
P ( n )持有iff K ( n )为 n产生1 = 1,0 n ≠1。
现在我们可以清楚地表达我们想要展示的内容:Ɐ n 。 P ( n )
基本情况: n ≤2
通过案例分析进行琐碎的检查:
P (0)没问题,因为 K (0)= 0
P (1)没问题,因为 K (1)= 1
归纳假设:
P ( n )适用于所有2≤ n &lt; C
归纳步骤:显示 P ( c )成立
QED。
答案 1 :(得分:0)
对于n=1
,通过调用算法,答案为K=n=1
,因此我们已完成该案例。
对于n=0
,根据定义,K(0) = 0
。
对于n>1
的情况,我们可以通过归纳来解决它:
基础:对于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
,因为我们只展示了一行。
声明:对于任何1<k<n
,我们都会K(k) = 0
证明适用于任何n&gt; 3:K(n) = K(n-1)*K(n-2) =(1) 0*0 = 0
(1):归纳假设,并且因为K(n-1),K(n-2)都适用于它,因为n-1,n-2> 1
P.S。请注意,对于非负数,该声明适用,例如,如果您允许n=-5
,则会获得K(-5)=-5
- 这是声明的反例。
答案 2 :(得分:0)
说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
。