汉诺塔PASCAL源程序有个问题

来源:百度知道 编辑:UC知道 时间:2024/06/06 14:00:25
program adf;
var
n:integer;
procedure hanoi(n:integer;a,b,c:char);
begin
if n>0then
begin
hanoi(n-1,a,c,b); 这里
writeln(a,'->'.c); 的3段
hanoi(n-1,b,a,c) 哪个好人能讲解下谢谢
end
end;
begin
write('n=');
readln(n);
writeln('move step:');
hanoi(n,'A','B','C');
end.
我的意思是讲解下那3段是如何实现的
如hanoi(n-1,a,c,b); 中的ACB这样排列什么意思?
自身怎么调用自身
请尽量详细好吗``谢谢我是新手

这是一个递归调用的例子,下面的网页有此问题的较详细资料,包括源程序、递归调用分析等。

http://bbs.cnpascal.cn/thread-35-1-7.html

这是递归调用。
看“procedure hanoi(n:integer;a,b,c:char);”,和
“hanoi(n,'A','B','C'); ”,
第二句的N传送到Procedure中的N,表示塔的柱数;
'a'传送到Procedure的a,表示第一个柱上所存的盘子;
‘b'传送到Procedure中的b,表示第二个柱上所存的盘子;
'c'传送到Procedure中的c,表示第三个柱上所存的盘子;

Procedure内,既然你已动了,N自然都要减一了!调用
“hanoi(n-1,a,c,b); ”体现了A、C的交换。

递归调用。我以前给一位老兄讲过C语言版本的。