汉诺塔


相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上
(1)将A上的n-1个盘子借助C移动到B上;

(2)将A上剩下的一个盘子移到C上;

(3)将n-1个盘子从B移动到C上;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
void hanoi(int n,char X,char Y,char Z)//n个盘子在A上,借助B,移动到C上
{
if(n==1)//如果A上只有一个盘子,直接移动到C上
printf("%c-->%c\n",X,Z);
else//一旦多余一个,则执行递归程序
{
hanoi(n-1,X,Z,Y);//将A上的n-1个盘子,借助C,移动到B上
printf("%c--> %c\n",X,Z);//将A 上的最后一个盘子移动到C上
hanoi(n-1,Y,X,Z);//将B上的n-1个盘子,借助A,移动到C上
}
}

int main()
{
int n;
printf("请输入盘子的总数:");
scanf("%d",&n);
hanoi(n,'A','B','C');
return 0;
}