在算法设计手册(第16页)一书中,讨论了以下增量算法的正确性的归纳证明。
Increment(y)
if (y == 0) return 1;
else if (y % 2 == 1) return 2 * Increment(floor(y/2));
else return y + 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