新闻中心

c++ 汉诺塔递归代码 c++汉诺塔算法图解

2025-12-06
浏览次数:
返回列表
汉诺塔问题通过递归实现,将n个盘子从A移动到C,需借助B辅助。首先将前n-1个盘子从A移到B,再将最大盘从A移到C,最后将n-1个盘子从B移到C。每次移动遵循大盘不压小盘原则。递归终止条件为只剩一个盘子时直接移动。算法体现分治思想,通过不断分解问题规模直至可直接求解。

c++ 汉诺塔递归代码 c++汉诺塔算法图解

汉诺塔问题是递归算法的经典例子,通过将问题分解为更小的子问题来解决。下面给出 C++ 实现代码,并附上算法执行过程的图解说明。

汉诺塔问题描述

有三根柱子 A、B、C,A 上有 n 个大小不同的圆盘,按从小到大的顺序叠放(大盘在下)。目标是把所有圆盘从 A 移动到 C,移动过程中遵守以下规则:

  • 一次只能移动一个圆盘
  • 每次移动的是某根柱子最上面的圆盘
  • 大盘不能放在小盘之上

C++ 递归实现代码

#include <iostream>
using namespace std;
<p>void hanoi(int n, char from, char to, char aux) {
if (n == 1) {
cout << "将盘子 " << n << " 从 " << from << " 移动到 " << to << endl;
return;
}
hanoi(n - 1, from, aux, to);  // 先把上面 n-1 个移到辅助柱
cout << "将盘子 " << n << " 从 " << from << " 移动到 " << to << endl;
hanoi(n - 1, aux, to, from);  // 再把 n-1 个从辅助柱移到目标柱
}</p><p>int main() {
int n;
cout << "输入盘子数量:";
cin >> n;
hanoi(n, 'A', 'C', 'B');
return 0;
}</p>

输出示例(n=3):

将盘子 1 从 A 移动到 C
将盘子 2 从 A 移动到 B
将盘子 1 从 C 移动到 B
将盘子 3 从 A 移动到 C
将盘子 1 从 B 移动到 A
将盘子 2 从 B 移动到 C
将盘子 1 从 A 移动到 C

算法图解与执行逻辑

以 n = 3 为例,三步递归策略如下:

第1步:将前2个盘子从 A → B(借助 C)

  • 把最上面两个盘子看作一个整体,先移到辅助柱 B
  • 这需要递归调用 hanoi(2, A, B, C)

第2步:将最大盘子从 A → C

Moshi Chat Moshi Chat

法国AI实验室Kyutai推出的端到端实时多模态AI语音模型,具备听、说、看的能力,不仅可以实时收听,还能进行自然对话。

Moshi Chat 160 查看详情 Moshi Chat
  • 此时 A 上只剩最大盘(第3个),直接移动到目标柱 C

第3步:将2个盘子从 B → C(借助 A)

  • 递归地把 B 上的两个盘子移到 C,完成最终目标

整个过程体现“分治”思想:要移动 n 层塔,先移上面 n-1 层让路,再移动底层,最后把 n-1 层盖上去。

递归调用结构图(简化表示)

hanoi(3, A→C)
├─ hanoi(2, A→B)
│  ├─ hanoi(1, A→C): A→C
│  ├─ A→B
│  └─ hanoi(1, C→B): C→B
├─ A→C
└─ hanoi(2, B→C)
   ├─ hanoi(1, B→A): B→A
   ├─ B→C
   └─ hanoi(1, A→C): A→C

每层递归都在缩小问题规模,直到只剩一个盘子时直接处理,这是递归终止条件。

基本上就这些。理解关键在于相信递归能处理好 n-1 的情况,你只需专注当前一层的操作逻辑。不复杂但容易忽略细节。

以上就是c++++ 汉诺塔递归代码 c++汉诺塔算法图解的详细内容,更多请关注其它相关文章!


# 边缘  # 详解企业网站推广的意义  # 哈尔滨网络seo  # 浙江规模大的seo关键词排名  # 精品文章网站建设总结ppt  # 个人网站建设有哪些内容  # 陕西省seo关键词优化排名  # 百度推广假钓鱼网站  # 巴彦淖尔SEO鱼刺系统  # 百度推广网站改动  # seo私人博客  # 放在  # ai  # 这是  # 的是  # 尼克  # 只剩  # 游戏开发  # 汉诺  # 移到  # 递归  # stream  # ios  # c++ 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 小米汽车11月交付量突破40000台!雷军:将继续努力  海棠电脑版入口_通过电脑访问海棠官网阅读  ExcelARRAYTOTEXT函数怎么自定义分隔符输出数组文本_ARRAYTOTEXT实现动态生成SQL语句  excel如何生成目录 excel一键生成工作表目录超链接  Win10磁盘清理工具在哪 Win10打开并使用磁盘清理【教程】  html两个JS只运行一个怎么办_让双JS在html中都运行方法【技巧】  Win10快速启动功能利弊分析 Win10开启或关闭快速启动教程【技巧】  在哪找SublimeJ远程工具_SFTP插件配置教程  解决 MongoDB 聚合查询中对象数组 _id 匹配问题  抖音网页版平台入口 抖音网页版官网在线访问教程  C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用  PowerPoint如何制作滚动字幕结尾彩蛋_PowerPoint路径动画实现平滑滚动字幕效果  提升Kafka消费者健壮性:会话超时处理与消息处理语义  消息称三星明年 2 月正式发布 HBM4,与 SK 海力士同台竞技  iwriter统一登录平台 iwrite账号密码登录页面  新手怎么开始学化妆 零基础化妆入门教程  生成rdflib自定义SPARQL函数:参数匹配与实践指南  J*aScript中正确使用querySelectorAll与复杂CSS选择器  优化MinIO list_objects_v2 操作的性能瓶颈与最佳实践  微信网页版官方入口教程 微信网页版网页版快速登录步骤  必由学在线入口 必由学网页版快速登录入口  《燕云十六声》两周内达九百万玩家!位居畅销榜第五  QQ邮箱官方网站登录入口_QQ邮箱网页版在线使用  在J*aScript中复现SciPy的B样条拟合与求值:关键考量  抖音DOU+怎么投最有效 抖音付费推广的ROI提升技巧  Composer如何处理Git子模块(submodule)依赖_Composer与Git Submodule的对比与选择  顺丰快件物流信息 官方网站查询入口  MinIO大规模对象列表性能瓶颈深度解析与外部元数据管理策略  腾讯视频怎么使用多账号家庭管理_腾讯视频家庭多账号统一管理与权限分配教程  Win10如何清理注册表垃圾 Win10注册表维护与优化指南【慎用】  响应式容器内容自动缩放与宽高比维持教程  Flexbox布局实践:实现粘性导航栏与底部固定页脚  在J*a里如何理解依赖关系的方向_依赖方向在模块结构中的作用  J*aScript实现单选按钮与关联输入框的联动禁用教程  Win11怎么设置鼠标指针速度_Win11提高鼠标指针精确度选项  火狐浏览器占用内存高卡顿怎么办 火狐浏览器性能优化设置技巧  Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】  打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门  Golang如何使用net/url解析URL_Golang URL解析与处理方法  AI抖音网页版免费视频入口 AI抖音网页端最新视频实时观看  Golang如何使用const iota_Go iota常量计数器讲解  Win11怎么修改默认浏览器_Windows 11设置Chrome为默认  小红书商家版怎样在笔记嵌入商品卡路径_小红书商家版在笔记嵌入商品卡路径【挂载教程】  qq游戏网页版直接玩_qq游戏免下载快速入口  Go语言中JSON数据解析与字段访问教程  Go语言中动态执行代码字符串的策略与实践  探索高级语言到原生C/C++的转译:挑战与内存管理策略  如何使用J*aScript精确选择并批量修改特定父元素下子链接的样式  微信怎么把收藏的内容分类管理 微信收藏内容标签分类方法  解决Django多数据库/多Schema环境下外键迁移问题 

搜索