【C++】用递归法解决汉诺塔问题

    技术2022-07-11  67

    如果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; }

    运行示范:

    Processed: 0.016, SQL: 9