费曼学习法实例--汉诺塔
参考程序:
#include <iostream>
using namespace std;long long step = 0; // 全局步骤计数void movePrint(int disk, char from, char to) {cout << "步骤" << ++step << ": 盘子" << disk << " 从 " << from << " -> " << to << '\n';
}// 递归函数:把 n 个盘子从 from 借助 aux 移到 to
void Hanoi(int n, char from, char aux, char to ) {if (n == 1) {// 基准情况:最小问题直接解movePrint(1, from, to);return;}// 1) 先把上面 n-1 个盘子从 from 移到 aux(借助 to)Hanoi(n - 1, from, to, aux);// 2) 把第 n 个(最大的)盘子从 from 移到 tomovePrint(n, from, to);// 3) 再把 n-1 个盘子从 aux 移到 to(借助 from)Hanoi(n - 1, aux, from, to);
}int main() {int n;cout << "请输入盘子个数 n(建议 n ≤ 10 观察输出):";cin >> n;cout << "移动 " << n << " 个盘子的步骤如下:\n";Hanoi(n, 'A', 'B', 'C'); // 把 A 柱的 n 个盘子借助 B 移到 Ccout << "总共移动步骤: " << step << '\n';return 0;
}