在《算法设计手册》(第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