通过诱导递归伪代码的证明|Skiena算法书



在《算法设计手册》(第16页(中,讨论了以下增量算法的 prock for诱导 prive for诱导。

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

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

基本情况y = 0:

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

感应假设:假定为0<N<y增量返回n 1。

我们试图证明增量(y(返回y 1。

琐碎的情况,y是(y = 2k,某些k(:

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

奇数案例:

假设y = 2k 1(奇数(,然后地板(y/2(= k等等:

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

so,

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

QED

最新更新