#include <stdio.h>
viod move(int n,int a,int b,int c)
{
if(n>0)
{
move(n-1,a,c,b)
printf("%d->%d\n",a,c);
}
}
main()
{
int n=3;
move(n,1,2,3);
}
程序错了:
#include <stdio.h>
void move(int n,int a,int b,int c)
{
if(n>0)
{
move(n-1,a,c,b);
printf("%d->%d\n",a,c);
move(n-1,b,a,c);
}
}
main()
{
int n=3;
move(n,1,2,3);
}
这道题考的就是递归函数的调用,如果你要执着于一步一步的去做很麻烦,起码也有十几个调用,我写了两页都没写完,太麻烦了,所以不需要去知道它是怎么去执行的,你只需要知道为啥这么写就可以了,这还只是3个,如果多点,这样一步一步去做一天都做不完,所以只要只要这么写就可以了,而且这个也只可能考点选择题,不必这么较真,建议你去搞懂为啥这么写;
void move(int n,int a,int b,int c)//a代表原始塔,b代表过程塔,c代表目标塔,n是需要移动的盘子
{
if(n>0)//判断要移动的盘子大于0不,如果不大于0就不执行下面的语句;
{
move(n-1,a,c,b);//将盘子的个数减一,然后将目标塔和过程塔互换
printf("%d->%d\n",a,c);//这个就是n个盘子里面最大的那个盘子从原始塔移动到目标塔去
move(n-1,b,a,c);//这个就是将原始塔和过程塔互换
}
反正有个通用公式,就是先将n-1个盘子移动到过程塔上,然后将原始塔上最大的盘子移动到目标塔,然后再将过程塔上的n-1个盘子移动到目标塔;
有些东西没必要去每一步都去写出来,就像for语句一样,那么多次执行也没见得有人一步一步去写出来嘛,只要搞懂它的原理就可以了,记住就行了;