梵塔问题

来源:百度知道 编辑:UC知道 时间:2024/07/05 05:01:25
如图:已知有三根针分别用1,2,3表示,在一号针中从小放n个盘子,现要求把所有的盘子

从1针全部移到3针,移动规则是:使用2针作为过度针,每次只移动一块盘子,且每根针上

不能出现大盘压小盘.找出移动次数最小的方案.

程序如下:

program fanta;

var

n:integer;

procedure move(n,a,b,c:integer);

begin

if n=1 then writeln(a,'--->',c)

else begin

move(n-1,a,c,b);

writeln(a,'--->',c);

move(n-1,b,a,c);

end;

end;

begin

write('Enter n=');

read(n);

move(n,1,2,3);

end.

的详细解析(pascal)

这是一个递归调用,分了几个阶段。
比如目标是要把n盘子个盘子放到3号柱,就得先把上面的n-1个盘子放到2号柱,再把它放到3号柱,然后才把2号柱的盘子搬回去

move(n-1,a,c,b);
writeln(a,'--->',c);
move(n-1,b,a,c);

这三句就是这个意思,b其实是中转,a是起始柱,c是目标柱

感谢lz的标程,我开始也不知怎么做