C++汉诺塔代码(递归)

        终于又是周末了,我好开心呀!直接开始创作。

        这几天的涨粉又开始加速了,希望能多保持一会:)

        好的,废话不多说,直接开始今天的文章:

​#include <iostream>
using namespace std;

void hanoi(int n, char from, char to, char auxiliary) {
    if (n == 1) {
        cout << "Move disc " << n << " from " << from << " to " << to << endl;
    } else {
        hanoi(n - 1, from, auxiliary, to);
        cout << "Move disc " << n << " from " << from << " to " << to << endl;
        hanoi(n - 1, auxiliary, to, from);
    }
}

int main() {
    int n;
    cout << "Enter number of discs: ";
    cin >> n;
    hanoi(n, 'A', 'C', 'B');
    return 0;
}

        这里使用了递归算法,将汉诺塔问题拆分成了子问题。hanoi(n, A, C, B)的意思是将n个盘子从A柱移动到C柱,借助B柱。

        当n等于1时,直接将盘子从from移动到to。否则,先将n-1个盘子从from移动到auxiliary,再将第n个盘子从from移动到to,最后将n-1个盘子从auxiliary移动到to。

猜你喜欢

转载自blog.csdn.net/SYC20110120/article/details/134468937