汉诺塔问题

问题概述与规则

假设有三根柱子要求,将A柱子上的所有盘子移动到B柱子上;
n个盘子标记为1, 2, 3, .... n ;
三个柱子标记为 A、B、C ;
初始状态所有的盘子都在A柱子上 ;

*移动磁盘条件
1. 一次只能移动一个磁盘
2. 不能在较小的磁盘上放置较大的磁盘

*理论主题
1. 递归函数和堆栈
2. 递归关系

图示

A柱子
A柱子
B柱子
B柱子
C柱子
C柱子
初始状态
初始状态
A柱子
A柱子
B柱子
B柱子
C柱子
C柱子
第一步
第一步
A柱子
A柱子
B柱子
B柱子
C柱子
C柱子
第二步
第二步
目标: 将A柱子上的盘子移动到B柱子上
目标: 将A柱子上的盘子移动到B柱子上(C柱子作为辅助)
A柱子
A柱子
B柱子
B柱子
C柱子
C柱子
第三步
第三步
A柱子
A柱子
B柱子
B柱子
C柱子
C柱子
第四步
第四步
A柱子
A柱子
B柱子
B柱子
C柱子
C柱子
第五步
第五步
A柱子
A柱子
B柱子
B柱子
C柱子
C柱子
第六步
第六步
A柱子
A柱子
B柱子
B柱子
C柱子
C柱子
第七步
第七步
Viewer does not support full SVG 1.1

问题拆解(n为盘子个数)

*n = 1: 直接将盘子从A(起始柱子) 移到B(目标柱子)

*n > 1: 将问题从宏观考虑
1. 借助柱子B将n-1个盘子从A柱子移动到C柱子
2. 此时A柱子上只有一个盘子直接移动到B(目标柱子)
3. 借助柱子A将n-1个盘子从C柱子移动到B柱子

Java代码实现

疑惑点:

  1. 一定要确定好哪个是起始柱子哪个是目标柱子;

  2. Java中的值传递

参考:

posted @   Felix_Openmind  阅读(215)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
*{cursor: url(https://files-cdn.cnblogs.com/files/morango/fish-cursor.ico),auto;}
点击右上角即可分享
微信分享提示