汉诺塔[[递归]]
代码:
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
void move(int n, char begin, char via, char to){
if(n == 1){
cout << "move " << n << " from " << begin << " to " << to << endl;
return;
}
move(n - 1, begin, to, via);
cout << "move " << n << " from " << begin << " to " << to << endl;
move(n - 1, via, begin, to);
}
int main(){
int n;
cout << "输入盘子的个数" << endl;
cin >> n;
move(n, 'A', 'B', 'C');
return 0;
}
函数说明
void move(int n, char begin, char via, char to){
if(n == 1){
cout << "move " << n << " from " << begin << " to " << to << endl;
return;
}
move(n - 1, begin, to, via);
cout << "move " << n << " from " << begin << " to " << to << endl;
move(n - 1, via, begin, to);
}
- 参数说明:
- 将第n个利用
begin
经过via
移动到to
上
- 将第n个利用
- 函数解释
- 如果是1个盘子,直接从
begin
移动到to
上 - 否则
- 先将
begin
上的n-1
个盘子从begin
借助to
移动到via
上暂存 - 再将剩下的一个盘子从
begin
直接移动到to
上 - 再将
via
上的n-1
个盘子从via
借助begin
移动到to
上
- 先将
- 如果是1个盘子,直接从