--- title: "普通汉诺塔问题" created: 2025-11-28 tags: - 算法 --- # 普通汉诺塔问题 即3根柱子时 有n个盘子 移动的总次数是 $2^n−1$ ```cpp #include using namespace std; int moveCount; int n; void TowerOfHanoi(int n, char source, char destination, char auxiliary) { // 当只有一个盘子时,直接移动到目标塔,这是递归的基本情况 if (n == 1) { // 直接移动一个盘子到目标塔,移动次数加一 moveCount++; return; } // 递归移动上面n-1个盘子到辅助塔,以目标塔作为中转 TowerOfHanoi(n - 1, source, auxiliary, destination); moveCount++; // 移动最底下的盘子到目标塔,移动次数加一 // 再次递归移动上面n-1个盘子从辅助塔到目标塔,以原始塔作为中转 TowerOfHanoi(n - 1, auxiliary, destination, source); } int main() { for(n=1;n<=12;n++){ moveCount=0; TowerOfHanoi(n, 'A', 'C', 'B'); cout<