这样我们只需考虑三个步骤。我们把所有的书(k本)由A移到C所采用的策略是:首先将去掉最大的一本书(k)后所留下的PYR(k—1)由 A移到 B;然后将 k由 A移到C;再将PYR(k-1)由B移到C:
要移动 PYR(k) 从A到C
要移动 PYR(k-1) 从 A 到 B
要移动 k 从A到 C
要移动PYR(k-1) 从B到C
这不是合法的解决问题的方法,因为规则要求我们一次只能移动一本书。为了遵守规则,必须一本一本地将PYR(k一1)从A移到B。我们仍可采用上述的方法,只不过是要一步步地移动。要把PYR(k—1)由A移到B,我们可以把PYR(k—2)由A移到C,再把k—1(这里k—1=4,即4本书中最大的一本)由A移到B,然后再把PYR(k—2)由C移到B。这时只需考虑移动三本书的问题了。为了把PYR(k-2)=PYR(3)由A移到C,只要把PYR(2)由A移到B,再把3由A移到C,然后把PYR(2)由B移到C。要把PYR(2)由A移到B,只要把PYR(1)=1由A移到C,再把2由A移到B,再把1由C移到B。这样,每一步我们都采用相同的策略。为了移动整个金字塔,我们先移动次大的金字塔;为了移动次大的金字塔,我们先移动比它再少一本书的金字塔,再移动次大的一本书,然后移动剩下的金字塔……这样下去,直至我们只需要移动一本书为止。这样我们就可以写出计算机的程序了。
第三章 问题解决
89