通过归纳法证明算法正确
Proving an algorithm correct by induction
我应该通过归纳法证明一个算法,它 returns 3n - 2n 对于所有 n >= 0。这是Eiffel写的算法。
P(n:INTEGER):INTEGER;
do
if n <= 1 then
Result := n
else
Result := 5*P(n-1) - 6*P(n-2)
end
end
我的理解是你分三步证明。基础步骤、归纳假设和完整性证明。这是我目前拥有的。
基础:
P(0) returns 0,和 30 - 20 = 0。
P(1) returns 1,和 31 - 21 = 1.
归纳假设:
假设 P(k) returns 3k - 2k 0 <= k < n.
完整性证明:
对于 n,P(n) returns 5(P(n-1)) - 6(P(n-2))
5(P(n-1)) - 6(P(n-2))
5(3n-1 - 2n-1) - 6(3n-2 - 2n-2) <- 基于归纳假设
这是我卡住的部分。我到底应该如何将其缩小为 3n - 2n?
利用 3n-1 = 3.3n-2 和 2n-1 = 2.2n-2 :
5(3n-1 - 2n-1) - 6(3n-2 - 2n-2)
= 15(3n-2) - 10(2n-2) - 6(3 n-2) + 6(2n-2)
= 9.3n-2 - 4.2n-2
= 3n - 2n
5(3^(n-1)-2^(n-1))-6(3^(n-2)-2^(n-2)) =
= 5*3^(n-1)-5*2^(n-1)-6*3^(n-2)+6*2^(n-2) =
= 5*3^(n-1)-5*2^(n-1)-2*3^(n-1)+3*2^(n-1) =
--------- ========= --------- =========
= 3*3^(n-1)-2*2^(n-1) =
= 3^n - 2^n
我应该通过归纳法证明一个算法,它 returns 3n - 2n 对于所有 n >= 0。这是Eiffel写的算法。
P(n:INTEGER):INTEGER;
do
if n <= 1 then
Result := n
else
Result := 5*P(n-1) - 6*P(n-2)
end
end
我的理解是你分三步证明。基础步骤、归纳假设和完整性证明。这是我目前拥有的。
基础:
P(0) returns 0,和 30 - 20 = 0。
P(1) returns 1,和 31 - 21 = 1.
归纳假设:
假设 P(k) returns 3k - 2k 0 <= k < n.
完整性证明:
对于 n,P(n) returns 5(P(n-1)) - 6(P(n-2))
5(P(n-1)) - 6(P(n-2))
5(3n-1 - 2n-1) - 6(3n-2 - 2n-2) <- 基于归纳假设
这是我卡住的部分。我到底应该如何将其缩小为 3n - 2n?
利用 3n-1 = 3.3n-2 和 2n-1 = 2.2n-2 :
5(3n-1 - 2n-1) - 6(3n-2 - 2n-2)
= 15(3n-2) - 10(2n-2) - 6(3 n-2) + 6(2n-2)
= 9.3n-2 - 4.2n-2
= 3n - 2n
5(3^(n-1)-2^(n-1))-6(3^(n-2)-2^(n-2)) =
= 5*3^(n-1)-5*2^(n-1)-6*3^(n-2)+6*2^(n-2) =
= 5*3^(n-1)-5*2^(n-1)-2*3^(n-1)+3*2^(n-1) =
--------- ========= --------- =========
= 3*3^(n-1)-2*2^(n-1) =
= 3^n - 2^n