递归经典问题——汉诺塔问题:
1-N从A移动到B,C作为辅助:
等价于:
1、1~N-1从A移动到C,A作为源,B作为辅助;
2、把N从A移动到B;
3、1~N-1从C移动到B,A作为辅助。
#include<iostream>
using namespace std;
/*
**将N个盘子从source移动到target的路径打印
**
**N: 初始的N个从小到大的盘子,N为最大编号
**from: 原始柱子
**to: 目标柱子
** help: 辅助柱子
*/
void printHanoiTower(int N,string from,string to,string help){
if(N==1){
cout<<"move "<<N<<" from "<<from<<" to "<<to<<endl;
return;
}
printHanoiTower(N-1,from,help,to); //先把前N-1个盘子挪到辅助空间去
cout<<"move "<<N<<" from "<<from<<" to "<<to<<endl; //N可以顺利地到达target
printHanoiTower(N-1,help,to,from); //让N-1从辅助空间挪到目标空间
}
int main(){
printHanoiTower(3,"A","B","C");
return 0;
}
注:将前n-1个盘子看做整体。