void TOH(int n,char x,char y,char z);
void main()
{
int n;
printf("nEnter number of plates:");
scanf("%d",&n);
TOH(n,'A','B','C');
getch();
}
void TOH(int n,char x,char y,char z)
{
if(n>0)
{
TOH(n-1,x,z,y);
printf("n%c -> %c",x,y);
TOH(n-1,z,y,x);
}
}
在这段代码中,我对递归调用以及字符和
整数是在函数调用中处理的,任何人都可以用简单的演示来解释。
最佳答案
一般来说-要用n个盘子解决河内塔问题,你应该:
将N-1板从A移到C
将A上的单个板移到B上
将N-1板从C移到B
#当塔订购A、C、B时,1是n-1而不是n板的相同问题
#3是n-1的相同问题,而不是订购A、B、A塔时的n板
例如:
对于n = 3
一。将2板从A移到C
2将A上的单个板移到B上
三。将2个板从C移到B
#1映射到调用TOH(n-1,x,z,y);
#2映射到调用printf("n%c -> %c",x,y);
#3映射到调用TOH(n-1,z,y,x);
编辑-示例
所以这将是调用的顺序(缩进是一个递归调用)
toh(3,'a','b','c')//将3个板从a移动到b
TOH(2,'A','C','B')//将两个板从A移动到C
toh(1,'a','b','c')//将一个板从a移动到b
将一个板从A移到C
toh(1,'b,'c,'a')//将一个板从b移动到c
//a中有1个板,c中有2个板
将一个板从A移到B
toh(2,'c,'b,'a')//将2个板从c移到b
TOH(1,'C','A','B')//将一个板从C移到A
将一个板从C移到B
TOH(1,'A','B','C')//将最后一块板从A移到B
完成-所有盘子都放好了