如果柱子标为A,B,C,要由A搬到C,在只有一个盘子的时候,只要直接搬到C就好;
当有两个盘子的时候,需要借助柱子B,先将A柱子上面的小盘子移动到B,再将A柱子下面的大盘子移动到C,最后将B柱子上的小盘子移动到C;
如果有两个以上的盘子,那就将第一个盘子以下的所有盘子看成是第二个盘子;再对下面的盘子进行以上操作,直到分配完毕。
这就是递归的应用,如果有n个盘子,则移动完所有的盘子需要2^n-1次,代码如下:
#include<stdio.h>
void hannota(int n,char A,char B,char C)
{
if(1==n)
printf("Move dish %d from %c to %c\n",n,A,C);
else
{
hannota(n-1,A,C,B);
printf("Move dish %d from %c to %c\n");
hannota(n-1,B,A,C);
}
}
int main()
{
int n;
printf("plz int the number of dish:\n");
scanf("%d",&n);
hannota(n,'A','B','C');
}