什么算法返回的形式证明

时间:2015-05-26 07:39:59

标签: 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;

有人可以帮忙吗?谢谢

3 个答案:

答案 0 :(得分:1)

这可以通过归纳来证明,但正如之前的海报所示,在证明中直接引用K时,正式提出是正确的。

以下是我的建议:让 P n )成为我们想要展示的属性:

P n )持有iff K n )为 n产生1 = 1,0 n ≠1。

现在我们可以清楚地表达我们想要展示的内容:Ɐ n P n

  1. 基本情况: n ≤2

    通过案例分析进行琐碎的检查:

    P (0)没问题,因为 K (0)= 0
    P (1)没问题,因为 K (1)= 1

  2. 归纳假设:

    P n )适用于所有2≤ n &lt; C

  3. 归纳步骤:显示 P c )成立

    1. 根据 K 的定义,我们有 K c )= K c -1)× K c -2)
    2. 通过归纳假设,我们知道 P c -1)和 P c - 2)持有。
    3. 由于 K c -1)和 K c -2)中至多有一个可以为1(另一个必须为0),产品为0。
    4. 这意味着 P c )成立
  4. 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