C++对汉诺塔问题的实现

汉诺塔(Tower of Hanoi)是经典的递归问题。假设有三根柱子 A、B、C,其中 A柱上有 n 个大小不一的圆盘,从大到小依次叠在一起。目标是将这些圆盘从 A 柱借助 B 柱移动到 C 柱。

游戏规则:

1、每次只能移动一个圆盘。

2、大圆盘不能放在小圆盘上。

代码实现:

#include 
using namespace std;
void hanoi(int n, char A, char C, char B) {
    if (n == 1) {
        cout << A << " ------> " << C << endl;
        return;
    }

    hanoi(n - 1, A, B, C);
    cout << A << " ------> " << C << endl;
    hanoi(n - 1, B, C, A);
}
int main() {
    int n;
    cout << "请输入汉诺塔层数: ";
    cin >> n;
    hanoi(n, 'A', 'C', 'B');
    return 0;
}

运行结果:

C++对汉诺塔问题的实现_第1张图片

思路分析:

        这显然是一个非常经典递归问题,假设移动n个圆盘,我们可以将其拆分为以下步骤:

1、将前 n -1 个圆盘从 A 柱移到 B 柱(借助C)。

2、将第n个圆盘从 A 柱移到 C 柱。

3、将 n-1 个圆盘又从 B 柱移动道 C 柱。

递归结束条件:当只有一个盘子时,直接移动到目标柱即可。

        

 

 

 

 

 

你可能感兴趣的:(c++,算法)