记性越来越差,可能不是“老了“,而是脑子里的“小血管“出了问题——这份共识给出中西医结合方案
2026/10/13 9:15:57
汉诺塔问题是经典的递归算法案例,其核心是将问题分解为子问题。以下是清晰的解决思路和代码实现:
#include <iostream> using namespace std; void move(int n, char from, char to) { cout << "移动盘子 " << n << " : " << from << " -> " << to << endl; } void hanoi(int n, char A, char B, char C) { if (n == 1) { move(n, A, C); } else { hanoi(n - 1, A, C, B); // 步骤1 move(n, A, C); // 步骤2 hanoi(n - 1, B, A, C); // 步骤3 } } int main() { int n = 3; // 示例:3个盘子 hanoi(n, 'A', 'B', 'C'); return 0; }移动盘子 1 : A -> C 移动盘子 2 : A -> B 移动盘子 1 : C -> B 移动盘子 3 : A -> C 移动盘子 1 : B -> A 移动盘子 2 : B -> C 移动盘子 1 : A -> C通过递归将大问题分解为相同结构的子问题,是解决汉诺塔问题的核心思想。建议通过调试观察 $n=2,3$ 时的调用栈来深入理解递归过程。