递归----经典问题:汉诺塔游戏
题目:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。这里假设最开始放盘子的柱子为A,最终要到到达的柱子为B,另一根柱子也就是一根辅助柱子为C,假设黄金圆盘从上到下依次编号1-N。
思路:题目要求,将1-N从A移动到B,C作为辅助
1:1~N-1从A移动到C,B为辅助,A作为源
2:把N移动到B
3:把1~N-1从C移动到B,A为辅助
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public class TowerOfHanoi { public static void main(String[] args) { printHanoiTower( 3 , "A" , "B" , "C" ); } /** * 将N个盘子从source移动到target的路径的打印 * * @param N 初始的N个从小到大的盘子,N是最大编号 * @param from 原始柱子 * @param to 目标柱子 * @param help 辅助柱子 */ static void printHanoiTower( int N,String from,String to,String help){ if (N== 1 ) { System.out.println( "move " +N+ " from " +from+ " to " +to); return ; } printHanoiTower(N- 1 , from, help, to); // 先把前N-1个盘子挪到辅助空间上去 System.out.println( "move " +N+ " from " +from+ " to " +to); // N 可以顺利到达目标盘子 printHanoiTower(N- 1 , help, to, from); // 让N-1从辅助空间回到源空间上去 } } |
结果:
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
本文来自博客园,作者:|旧市拾荒|,转载请注明原文链接:https://www.cnblogs.com/xiaoyh/p/10258630.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构