如果n不等于1,我们要分3步,
1,先把n-1个圆盘从A借助C成功的移动到B
2,然后再把第n个圆盘从A移动到C
3,最后再把n-1个圆盘从B借助A成功的移动到C。
hanoi(n, ‘A’, ‘B’, ‘C’)表示的是把n个圆盘从A借助B成功的移动到C 所以hanoi(n-1, ‘A’, ‘C’, ‘B’)就表示的是把n-1个圆盘从A借助C成功的移动到B hanoi(n-1, ‘B’, ‘A’, ‘C’)就表示的是把n-1个圆盘从B借助A成功的移动到C move函数是把A上剩下的第n个盘移动到C上。 代码如下:
#include <iostream> using namespace std; void move(char src, char dest) { cout << src << "-->" << dest << endl; } void hanoi(int n, char src, char medium, char dest) { if (n == 1) move(src, dest); else { hanoi(n - 1, src, dest, medium); move(src, dest); hanoi(n - 1, medium, src, dest); } } int main() { int m; cout << "输入盘子的数量:"; cin >> m; cout << "the steps to moving " << m << " diskes:" << endl; hanoi(m, 'A', 'B', 'C'); return 0; }运行示范: