题目
以递归的方式来实现汉诺塔
汉诺塔游戏规则如图所示
代码
具体代码如下所示,在代码中,hanio(n, x, y, z)
,代表了把 n 个盘子由 x
移动到 z
。根据分析,我们知道递归体包含 3 个步骤:
把从小到大的 n-1 个盘子从 x
移动到 y
,那么代码就是 hanio(n-1, x, z, y)
;
再把最大的一个盘子从 x
移动到 z
,那么直接完成一次移动的动作就可以了;
再把从小到大的 n-1 个盘子从 y
移动到 z
,那么代码就是 hanio(n-1, y, x, z)
。对于终止条件则需要判断 n 的大小。如果 n 等于 1,那么同样直接移动就可以了。
// 汉诺塔的递归实现
#include <iostream>
using namespace std;
void hanio(int n,char x,char y,char z){
if(n<1)
cout<<"层数不能小于1";
if(n==1)
cout<<x<<"-->"<<z<<endl; //将唯一的一个盘子直接移从x移到z
else{
hanio(n-1,x,z,y); //将n-1个在x的盘子通过z移到y
cout<<x<<"-->"<<z<<endl; //将最后一个盘子从x移到z
hanio(n-1,y,x,z); //将n-1个在y的盘子通过x移到z
}
}
int main() {
hanio(2,'A','B','C');
return 0;
}