汉诺塔问题通过递归实现分治思想,将n个圆盘从A移动到C:先递归将前n-1个圆盘从A经C移至B,再将第n个圆盘从A移至C,最后递归将n-1个圆盘从B经A移至C;当n=1时直接移动。该过程共需2^n−1步,体现递归函数拆解问题、依赖终止条件的核心机制。

汉诺塔问题是递归思想的经典应用。问题描述为:有三根柱子 A、B、C,A 上从上到下按大小顺序叠放了 n 个圆盘,目标是将所有圆盘移动到 C 柱,过程中每次只能移动一个圆盘,且不能将大盘放在小盘之上。
解决汉诺塔的关键在于分治思想:
这个过程不断递归,直到只剩一个圆盘。
#include <iostream>
using namespace std;
<p>// 参数说明:
// n: 当前要移动的圆盘数量
// from: 起始柱
// to: 目标柱
// aux: 辅助柱
void hanoi(int n, char from, char to, char aux) {
if (n == 1) {
cout << "Move disk 1 from " << from << " to " << to << endl;
return;
}
// 将前 n-1 个盘从 from 移动到 aux(借助 to)
hanoi(n - 1, from, aux, to);</p><pre class='brush:php;toolbar:false;'>// 将第 n 个盘从 from 移动到 to
cout << "Move disk " << n << " from " << from << " to " << to << endl;
// 将 n-1 个盘从 aux 移动到 to(借助 from)
hanoi(n - 1, aux, to, from);}
立即学习“C++免费学习笔记(深入)”;
int main() { int n; cout << "Enter number of disks: "; cin >> n; hanoi(n, 'A', 'C', 'B'); // A为起始柱,C为目标柱,B为辅助柱 return 0; }
当输入 n = 3 时,输出如下:
Move disk 1 from A to C Move disk 2 from A to B Move disk 1 from C to B Move disk 3 from A to C Move disk 1 from B to A Move disk 2 from B to C Move disk 1 from A to C
总共需要 2^n - 1 步,即 7 步完成。
递归函数的核心在于明确每一步的职责:
基本上就这些。理解了这个结构,就能轻松掌握递归在分治类问题中的应用。
以上就是c++++中如何使用递归解决汉诺塔问题_c++递归汉诺塔方法的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号