# 递归
下面是几个比较基本的题目。
# HANOI 塔问题
假设有三个分别命名为 的塔座,在塔座 上插有 个直径大小各不相同、依小到大编号为 的圆盘。现要求将 轴上的 个圆盘移至塔座 上并仍按同样顺序叠排,圆盘移动时必须遵循下列规则:
- 每次只能移动一个圆盘
 - 圆盘可以插在 &A, B, C$ 中的任一塔座上
 - 任何时刻都不能将一个较大的圆盘压在较小的圆盘之上。
 请通过编程来打印出移动的步骤。
输入样例:
5输出样例:
A-->C A-->B C-->B A-->C B-->A B-->C A-->C A-->B C-->B C-->A B-->A C-->B A-->C A-->B C-->B A-->C B-->A B-->C A-->C B-->A C-->B C-->A B-->A B-->C A-->C A-->B C-->B A-->C B-->A B-->C A-->C
代码如下:
#include <iostream> | |
using namespace std;  | |
const char all = ('A'^'B'^'C');  | |
void hanoi(int n, char begin, char end) {  | |
if (n==1) {  | |
printf("%c-->%c ", begin, end);  | |
return;  | |
    } | |
else {  | |
char oth = begin^end^all;  | |
hanoi(n-1, begin, oth);  | |
printf("%c-->%c ", begin, end);  | |
hanoi(n-1, oth, end);  | |
    } | |
} | |
int main() {  | |
int n;  | |
cin>>n;  | |
hanoi(n, 'A', 'C');  | |
return 0;  | |
} |