汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。
问,现在A柱上有n片黄金圆盘,要将这n片圆盘按照要求,移动到C柱上,写出具体的移动方法。
简单的递归问题,解决n个圆盘需要将n-1个圆盘移动到中转柱上,然后将第n个圆盘移动到目标柱上,最后再把n-1个中转柱上的圆盘移动到目标柱上。
#include<stdio.h>
void Hanoi(int n,char begin,char mid,char end);
int main()
{
int n;
scanf("%d",&n);
Hanoi(n,'A','B','C');
return 0;
}
void Hanoi(int n,char begin,char mid,char end)
{
if(n==1){
printf("%c->%c\n",begin,end);
}
else{
Hanoi(n-1,begin,end,mid);//注意使用的参数名称
printf("%c->%c\n",begin,end);
Hanoi(n-1,mid,begin,end);
}
}