通过引入递归伪代码证明|斯基纳算法书

时间:2017-06-03 06:10:43

标签: algorithm recursion induction

在算法设计手册(第16页)一书中,讨论了以下增量算法的正确性的归纳证明。

Increment(y)
    if (y == 0) return 1;
    else if (y % 2 == 1) return 2 * Increment(floor(y/2));
    else return y + 1;

但我在讨论中的某一点(或假设)感到困惑。要求解决方案(通过归纳证明正确性)以便更好地理解。

1 个答案:

答案 0 :(得分:4)

基本情况y = 0:

通过第一个语句,输出为0 + 1 = 1 = y + 1;

归纳假设:假设0 <&lt; n&lt; y increment返回n + 1。

我们试图证明增量(y)返回y + 1.

琐碎的情况,y甚至是(对于某些k,y = 2k):

然后y%2为0,if子句为false,返回值为y + 1;

奇怪的案例:

假设y = 2k + 1(奇数)然后是floor(y / 2)= k并且因此:

increment(floor(y/2))=increment(k) = k+1

所以,

2*increment(floor(y/2)) = 2k+2 = y+1

QED