在汉诺塔中递归部分里a,b,c三个的顺序为什么要变?

来源:百度知道 编辑:UC知道 时间:2024/06/18 04:17:08
原程序:
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);

这是因为 话说这是pascal吧??
汉诺塔 的解题关键就是 把a上的n个盘子 借助 b 移到 c上
而分解动作 就是
1:先把a上的 n-1个盘子 借助 c 移到 b上 即move(n-1,a,c,b);
2:把a上最后(大)的盘子移到c上 即writeln(a,'--->',c);
3:再把b上的 n-1个盘子 借助 a 移到 c上 即move(n-1,b,a,c);
不断的通过move实现 把一个柱子上的盘子 借助另一个柱子 移到第三个柱子上
由于这三个柱子的作用变了 move的变量顺序是(被移动柱 借助柱 目标柱)
所以递归中a,b,c顺序变了

编写语句,使输入的三个数a,b,c按从大到小的顺序输出 a.b.c是三个不同的自然数,在a/b=c中 6.键盘输入三个整数a,b,c要求按由大到小的顺序输出。要求用Turbo C编写程序 有谁知道用C语言编程,把a,b,c三个数按递增的顺序打印出来 对输入的任意三个数 a、b 和 c,按从小到大的顺序输出,用流程图表示该算法 写一个程序,由大至小依次输出顺序读入的三个整数a,b,c的值。 在等式A*(B+C)=110+C中,A、B、C是三个不同的质数,那么A+B+C= 在ΔABC中,已知三个内角A,B,C所对的边分别是a,b,c 在直角坐标系,三角形ABC的三个顶点为A(0,3),B(3,3),C(2,0)。若直线x=a将三角形分成面积相等2部分,求a 三个不同的质数ABC,A+B+C+A=2000 求A+B+C