河内塔是根据一个传说形成的一个问题:
有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:
- 每次只能移动一个圆盘;
- 大盘不能叠在小盘上面。
提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须遵循上述两条规则。
问:如何移?最少要移动多少次?
递归的思想 A->C 如何实现n-1个从A到B(通过C) ,最下面的底座从A到C,再在把B座的n-1个通过A移动到C,依次递推.....
#include <stdio.h>
main()
{
void hannoi(int n,char one, char two,char three);
int m=3;
hannoi(m,'A','B','C');
}
void hannoi(int n,char one,char two,char three)
{
void move(char x,char y);
if (n==1)
move(one,three);
else
{
hannoi(n-1,one,three,two);
move(one,three);
hannoi(n-1,two,one,three);
}
}
void move(char x,char y)
{
printf("%c-->%c\n",x,y);
}