1.总体思想
根据要求,转移之后的叠放顺序仍为从上至下由小到大,故需将A中最底下的圆盘(即最大的圆盘,称为N)借助C移动至B。而移动N之前,必须先将位于N之上的n-1块圆盘移至C上,即需先完成n-1块圆盘的转移,故核心思想为递归思想。
2.关键步骤
当n=1时,直接将圆盘从A上移至B上即可。
当n>1时,先将N之上的n-1块圆盘移至C,再将N移至B。再将N-1之上的n-2块圆盘移至A,再将N-1移至B。。如此递推,直至n=1。
3.代码实现
#include<iostream>
#include<cstdio>
using namespace std;
void hanoi(int n,int a,int b,int c){
char x=a,y=b,z=c;
if(n==1){
cout<<x<<"-->"<<y<<endl;
}
else{
hanoi(n-1,a,c,b);
cout<<x<<"-->"<<y<<endl;
hanoi(n-1,c,b,a);
}
}
int main(){
int n;
cin>>n;
hanoi(n,'a','b','c');
return 0;
}
4.总结------递归工作栈
每次执行递归函数时在递归工作栈中执行了压栈操作,第一次调用递归函数后的运算结果为栈底,最后一次调用递归函数的运算结果为栈顶。当不满足是否执行递归函数的判断条件时,开始出栈,依次执行。