递归算法示例——汉诺塔问题
将X塔座上的n个圆盘移到塔座Y上,并按同样的顺序叠排
(1)以塔座Y为中介,将X上的n-1个圆盘移到Z上;
(2)将第n个移到Y塔座上;
(3)以塔座X为中介,将Z上的n-1个圆盘移到Y上;
#include<iostream>
using namespace std;
enum tower{A='X',B='Y',C='Z'};
void move(int n,tower x,tower y){
cout<<"The disk"<<n<<" is moved from "<<char(x)<<" to top of tower "<<char(y)<<endl;
}
void Hanoi(int n,tower x,tower y,tower z){
if(n){
Hanoi(n-1,x,z,y);
move(n,x,y);
Hanoi(n-1,z,y,x);
}
}
int main(){
int n;
scanf("%d",&n);
Hanoi(n,A,B,C);
return 0;
}
/我是编程小白,只是想想学习一下编程,欢迎指出错误。