【发布时间】:2015-03-07 21:01:10
【问题描述】:
我应该通过归纳来证明一个算法,它返回 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) 返回 0,并且 30 - 20 = 0。
P(1) 返回 1,并且 31 - 21 = 1。
归纳假设:
假设 P(k) 对于 0 k - 2k。
完整性证明:
对于 n,P(n) 返回 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?
【问题讨论】:
-
不要过分强调,但代数应该可以工作。
-
接下来的问题是:你怎么知道它是
3^n - 2^n? -
@IVlad 给了它。
-
@Jimenemex:在你的程序中,你写了
5*g(n-1) - 6*g(n-2)?g是什么? -
@geceo 确实如此。我的错。应该是 P(n)
标签: algorithm correctness induction eiffel proof-of-correctness