#include<stdio.h>
int count=1;
void hanoi(int n,char a,char b,char c)
{
if(n==1)
{
printf("%d %c ---> %c\n",count,a,c);
count++;
}
else
{
hanoi(n-1,a,c,b);
printf("%d %c ---> %c\n",count,a,c);
hanoi(n-1,b,a,c);
}
}
int main()
{
int n;
scanf("%d",&n);
hanoi(n,'a','b','c');
return 0;
}
这里做一个简单的分析:
首先我们假设将所以盘子都从A盘移动到C盘上我们只需要三步
1 将A盘上除了最大的盘子以外的全部盘子(看作1个整体)移动到B盘上
2 将A盘上的最大盘子移动到C盘上
3 将B盘上的(整体)盘子移动到C盘上
这里我们的思想是交换柱子来实现只输出A ---> C(注意这里的A和C并非不变)
我们在第1步的时候将C柱和B柱的位置交换(有点类似我们写三个数字排序的算法),这样我们把A上的盘子移动到C位置上的柱子就相当于我们把它们移动到B柱上了!!!!
同理,在我们在需要将B盘上的盘子移动到C柱上的时候,我们将A柱和B柱的位置交换这样我们就实现了即使是输出A到C,实际上我们是将B盘上的盘子移动到C盘上了!!!
如果仍然无法理解的话
这里给出用递归算法的来解决汉诺塔问题_PharahBai的博客-CSDN博客_汉诺塔递归算法
他的解释很好,我也是看了他的博客才理解的