汉诺塔问题c++,递归计算
时间: 2024-08-13 18:00:44 浏览: 54
汉诺塔问题c++递归详解
汉诺塔问题是一个经典的递归问题,源于印度古老的数学游戏,涉及将一堆盘子从一根柱子移动到另一根柱子,每一步只能移动一个大盘子,并且大盘子不能放在小盘子上面。在C++中,递归算法可以这样实现:
```cpp
#include <iostream>
void hanoi(int n, char from_rod, char to_rod, char aux_rod) {
// 基本情况:当只有一个盘子时,直接从源移到目标
if (n == 1) {
std::cout << "Move disk 1 from rod " << from_rod << " to rod " << to_rod << std::endl;
return;
}
// 分治策略:递归地处理剩下的盘子,先将n-1个盘子从源移动到辅助杆
hanoi(n - 1, from_rod, aux_rod, to_rod);
// 然后将最大的盘子从源移到目标
std::cout << "Move disk " << n << " from rod " << from_rod << " to rod " << to_rod << std::endl;
// 最后,把之前移动到辅助杆的小盘子移动回目标
hanoi(n - 1, aux_rod, to_rod, from_rod);
}
int main() {
int num_disks = 3; // 可以替换为你想要解决的具体盘子数
hanoi(num_disks, 'A', 'C', 'B'); // A、B、C代表三个柱子,A作为起始点,C为目标点,B作为临时存放点
return 0;
}
阅读全文