C++ 汉诺塔问题(递归)

一、思路:

      if(n == 1) {

            直接从A移到C柱子上;

      }

      if(n > 1) {

             先把A柱子上的前n-1个盘子(看作一个整体)从A借助C移到B;

             接着将A柱子上的第n个盘子直接移动到C柱子上;

             再将B柱子上的n-1个盘子借助A移动到C;

     }

 

二、实现程序:

#include 
using namespace std;

// 汉诺塔问题
void HanoiTower(int n, char A, char B, char C) {
    if(n == 1)
        cout << n << " " << A << "->" << C << endl;
    else {
        HanoiTower(n-1, A, C, B); // 将A中前n-1个盘子借助C移到B
        cout << n << " " << A << "->" << C << endl; // 接着将A柱子上的第n个盘子直接移动到C柱子上;
        HanoiTower(n-1, B, A, C); // 再将B柱子上的n-1个盘子借助A移动到C;
    }
}

int main(int argc, const char * argv[]) {
    int n;
    
    cout << "请输入要移动的盘子数:";
    cin >> n;
    HanoiTower(n, 'A', 'B', 'C');
    return 0;
}

 

你可能感兴趣的:(数据结构)