发表于:2003-12-23 13:36:00
4楼
出自http://www.zjedu.org/xdjyjs/90/346.htm
例2 河内塔问题。
这是一个古老传说中的问题:有3个高塔与64个直径互不相同的环,开始时这些环按尺寸大小依次堆在一个塔上,最大的在最下面。由一些僧侣把初始塔上的环移到另外一个塔上,每天只能移动一个,且移好后必须仍旧使大的在下面,按序堆放,其间可利用第三个塔暂时存放环。传说预言僧侣们完成任务之时,就是世界的末日。我们不知道僧侣们何时开始他们的工作,但可以考虑建立数学模型,借用计算机算出所要用的时间。算法思想是:若僧侣们能把上面的63个环从初始塔依次移到临时塔上,则就可将最大的环移到结束塔上,并依次把其它63个环从临时塔移到结束塔。
采用Pascal语言编程简略如下:
Procedure Tower(n: nonneight; start, finish, other: towernames);
IF n>0 then begin
Tower (n-1, start, other, finish);
Writeln (“ move top ring from”, start, “to”, finish);
Tower (n-1, other, finish, start)
end;
上述程序中writeln是一个差分方程,其中W(o)=0是初始条件,W(n)=2n-1是这个差分方程的解。可得河内塔问题的解是W(64)=264-1,大约是1.84×1019天,即约5.05×1014世纪。真是太长的时间了,难怪有“世界末日”的预言。