#include<iostream>
using namespace std;
void Hanoi(int n,char x,char y,char z)
{if(n==1)
cout<<"将第"<<n<<"个圆盘从"<<x<<"移动到"<<z<<endl;
else
{
Hanoi(n-1,x,z,y);
cout<<"将第"<<n<<"个圆盘从"<<x<<"移动到"<<z<<endl;
Hanoi(n-1,y,x,z);
}
}
int main()
{
int n;
char x,y,z;
while(cin>>n>>x>>y>>z)
Hanoi(n,x,y,z);
return 0;
}
关于移动方法其实很好理解,也很容易得出移动次数2*(n-1)+1
补充:
1)A,B,C三根柱子其实不是固定的,而是随着Hanoi(1,A,B,C)这个原始函数变化的。参考如下:
https://www.zhihu.com/question/24385418/answer/107705695
2)关于递归的概念,其实就是将一项连续的巨大的任务分为若干个互相联系的小任务,我们并非要推算出每一步,而是应该着眼于n与n-1之间的关系。参考如下:
https://www.zhihu.com/question/24385418/answer/258015386