首页/新闻资讯/正文详情

Java 递归之汉诺塔:搞懂为什么换个参数名字就能移动盘子

发布时间:2026/9/27 6:12:26 来源:云帆数科 栏目:资讯中心
Java 递归之汉诺塔:搞懂为什么换个参数名字就能移动盘子
Java 递归 汉诺塔 新手学习今天上课学了汉诺塔递归一开始完全看不懂为什么调换一下参数名字代码就知道怎么移动盘子了。写下来记录一下我是怎么想明白的。汉诺塔问题三个柱子 A、B、C有 n 个盘子叠在 A 上要全部移到 C 上。规则每次只能动一个盘子大的不能放在小的上面。递归思路不要想着怎么一步步移动先想大问题怎么拆成小问题要把 n 个盘子从 A 移到 C分三步先把上面 n-1 个盘子从 A 移到 B借助 C把最底下最大的那个盘子从 A 直接移到 C再把 B 上的 n-1 个盘子从 B 移到 C借助 A而移动 n-1 个盘子的方法和移动 n 个盘子的方法是一模一样的只是起点、辅助、目标换了。这就是递归。代码public static void hanoi(int n, char pos1, char pos2, char pos3) { if (n 1) { move(pos1, pos3); return; } hanoi(n - 1, pos1, pos3, pos2); move(pos1, pos3); hanoi(n - 1, pos2, pos1, pos3); } public static void move(char pos1, char pos2) { System.out.println(pos1 - pos2); } public static void main(String[] args) { hanoi(3, A, B, C); }我一开始最困惑的问题为什么代码里没有真的去记录每个柱子上有几个盘子只是调换 pos1、pos2、pos3 这三个参数就知道怎么移动了后来想明白了三个物理柱子 A、B、C 是固定不变的。hanoi 方法的三个参数 pos1、pos2、pos3根本不是代表 A、B、C 这三个柱子本身而是代表三个角色pos1当前这个任务的起点pos2当前这个任务的辅助pos3当前这个任务的目标比如调用 hanoi (3, A, B, C) 起点是 A辅助是 B目标是 C。然后第一个递归调用 hanoi (n-1, pos1, pos3, pos2) 意思是现在要搬上面 n-1 个盘子这个子任务的起点还是 A但是辅助换成了 C目标换成了 B。A、B、C 这三个字母从来没变过只是在不同的子任务里它们扮演的角色不一样了。代码根本不需要知道每个柱子上现在有几个盘子它只需要按照规则把大任务拆成三个小步骤然后递归下去就行。n1 是什么意思n1 是递归的终点。当分到只剩 1 个盘子的时候不用再拆了直接把这个盘子从当前任务的起点 pos1移到当前任务的目标 pos3然后 return 结束这一层。这里的 pos1 和 pos3已经是经过层层调换后的角色了所以 move 打印出来的移动步骤就是正确的。单引号和双引号的问题一开始写 hanoi (3, A, B, C) 报错了因为方法参数定义的是 char 类型char 只能放单个字符必须用单引号 A。双引号是 String 字符串类型对不上。运行结果n3A-C A-B C-B A-C B-A B-C A-C一共 7 步正确。一点心得递归这个东西光看代码真的绕。我后来把 n3 的每一层调用都写在纸上一层一层列出来看哪些时候进 if哪些时候执行 move哪些时候 return才慢慢搞懂

相关推荐

【RAG系列】基础概念
【RAG系列】基础概念

1. 什么是RAG?它解决了大模型的是什么问题? 1.1 什么是RAG? RAG(Retrieval-Augmented Generation,检索增强生成)是一种在LLM推理时动态检索外部知识库,将检索到的相关内容注入Prompt再由LLM生成答案的架构范式。 1.2 R… · 2026/9/27 6:12:20

5G语音VoNR与EPS Fallback信令流程详解及优化排查指南
5G语音VoNR与EPS Fallback信令流程详解及优化排查指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 6:12:02

郑州做网站和推广哪家好?避开高价坑的5大注意事项
郑州做网站和推广哪家好?避开高价坑的5大注意事项

郑州做网站和推广哪家好?避开高价坑的5大注意事项 在郑州找建站公司,最怕的不是技术不行,而是被坑高价。很多老板一咨询,对方报价从五千到五万不等,还没看方案就让你交定金,心里直打鼓。其实,选对服务商的核心不在于谁的名头大,而在于你是否掌握了几… · 2026/9/27 6:12:02

3招避坑,网站建设服务公司专业服务怎么选不花冤枉钱
3招避坑,网站建设服务公司专业服务怎么选不花冤枉钱

3招避坑,网站建设服务公司专业服务怎么选不花冤枉钱 找建站公司最怕什么?怕被坑,更怕花大钱买了个“电子垃圾”。很多独立站长在筛选 网站建设服务公司专业服务… · 2026/9/27 6:48:17

Python数据可视化 Pyecharts 制作 GEO 地理坐标系
Python数据可视化 Pyecharts 制作 GEO 地理坐标系

地理坐标系图表是数据可视化中的一个强大工具,它可以将数据与地理位置结合,帮助用户直观地分析和展示地理区域的数据分布。pyecharts库中的Geo类提供了一个简便且灵活的方式来创建地理坐标系图表,使开发者能够通过添加数据点、连接线以及调整地图样式等功能,生成从城市、地… · 2026/9/27 6:48:17

这个软件是什么?
这个软件是什么?

这个软件是什么? Motrix 是一款桌面下载管理器,可以安装在 Windows、macOS 和 Linux 电脑上使用。它主要用来下载网上的文件,支持普通网页链接、FTP 链接、BT 种子和磁力链接,下载文件不需要把文件上传到任何网站。界面简洁&… · 2026/9/27 6:48:05

Python数据可视化 Pyecharts 制作 Effectscatter 涟漪散点图
Python数据可视化 Pyecharts 制作 Effectscatter 涟漪散点图

涟漪特效散点图作为一种具有动态视觉效果的图表类型,能够在数据可视化中有效地吸引用户注意,突出数据中的关键点。借助 pyecharts 提供的 EffectScatter 类,开发者可以轻松创建这种带有涟漪动画效果的散点图,并通过一系列丰富的配置选项自定义其外观和交互方式。涟漪特效不… · 2026/9/27 6:48:05

凡科网站建设视频看完还怕被黑?3个实战技巧搞定避坑指南
凡科网站建设视频看完还怕被黑?3个实战技巧搞定避坑指南

凡科网站建设视频看完还怕被黑?3个实战技巧搞定避坑指南 昨天凌晨两点,我的手机突然响了,是客户急得声音都变了:“网站挂了个博彩广告,首页全变了,客户全投诉了,怎么办?”… · 2026/9/27 6:47:58

Python数据可视化 Pyecharts 制作 Gauge 仪表盘
Python数据可视化 Pyecharts 制作 Gauge 仪表盘

仪表盘是一种常见的可视化工具,广泛用于展示实时动态数据。无论是监控系统状态、跟踪进度,还是展示关键性能指标,仪表盘都能直观地传达数值变化的趋势和幅度。在Python的可视化库中,pyecharts提供了丰富的仪表盘功能,通过Gauge类,开发者可以灵活构建高度自定义的仪表盘,… · 2026/9/27 6:47:58

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码