问题:有4个盘子,从小到大在A柱上,要求大小顺序不能变,移动到C柱上,可以借助B柱
移动的次数:2(n)-1
分析:
1,需要用迭代的思想来思考,所以,结束的条件是n==1
2,首先需要借助C柱把A柱上n-1个盘子移动到B柱上move(n-1,a,c,b)
3,然后借助A柱把B柱上n-1个盘子移动到C柱上,如此进行下面的移动move(n-1b,a,c)
函数参数的意思:n是盘子个数,a柱,b柱,c柱
具体代码:
void move(int n,char a,char b,char c){
if(n==1){
printf("%c->%c\n",a,c);
}else{
move(n-1,a,c,b);
printf("%c->%c\n",a,c);
move(n-1,b,a,c);
}
}
其中n=4
结果截图:
n阶汉诺塔:
int i=0;
void move(char a,int n,char c){
i++;
cout<<i<<". Move disk "<<n<<" from "<<a<<" to "<<c<<endl;
}
void hannuo(int n,char a,char b,char c){
if(n==1){
move(a,1,c);
}else{
hannuo(n-1,a,c,b);
move(a,n,c);
hannuo(n-1,b,a,c);
}
}
int main()
{
int n;
char x='X';
char y='Y';
char z='Z';
while(cin>>n){
hannuo(n,x,y,z);
i=0;
cout<<endl;
}
return 0;
}
截图: