主题:请高手帮我解释一下汉诺诺塔游戏程序中的直接递归调用部分
请高手帮我解释一下汉诺塔游戏程序中的直接递归调用部分
program hanoitower(input,output);
var total:integer ;
procedure movetower(h,f,t,u:integer);
procedure movedisk(take,put:integer);
begin
writeln(' ',take:2,'........>',put:2)
end;
begin
if h>0 then
begin
movetower(h-1,f,u,t);
movedisk(f,t);
movetower(h-1,u,t,f)
end;
end;
begin {main program}
write(' input a number of disk');
readln(total);
writeln;
writeln('the trace for disks moving:');
writeln;
writeln(' from........to.........');
movetower(total,1,3,2);
end.
其中红色部分我未看懂,我认为在 第一个递归调用处即"movetower(h-1,f,u,t)"程序会反复调用自己至到h=1为止,这样一来过程式“movedisk(f,t)"就只能调用一次所以只能输出一次结果,但是我运行了一下,可以输出正确结果,这说明程序本身是正确的只是我未看懂而已所以肯请大哥给我解释一下。
program hanoitower(input,output);
var total:integer ;
procedure movetower(h,f,t,u:integer);
procedure movedisk(take,put:integer);
begin
writeln(' ',take:2,'........>',put:2)
end;
begin
if h>0 then
begin
movetower(h-1,f,u,t);
movedisk(f,t);
movetower(h-1,u,t,f)
end;
end;
begin {main program}
write(' input a number of disk');
readln(total);
writeln;
writeln('the trace for disks moving:');
writeln;
writeln(' from........to.........');
movetower(total,1,3,2);
end.
其中红色部分我未看懂,我认为在 第一个递归调用处即"movetower(h-1,f,u,t)"程序会反复调用自己至到h=1为止,这样一来过程式“movedisk(f,t)"就只能调用一次所以只能输出一次结果,但是我运行了一下,可以输出正确结果,这说明程序本身是正确的只是我未看懂而已所以肯请大哥给我解释一下。