Java代码实现,求解汉诺塔问题。

本文介绍了汉诺塔问题的背景和递归解决方案。通过四条递归法则,解释了如何利用递归思想解决汉诺塔问题。文章还详细阐述了当圆盘数量为1、2和大于2时的步骤,并提供了Java代码实现来移动指定数量的圆盘。
摘要由CSDN通过智能技术生成

汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。
大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。
大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。
并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。 问应该如何操作?

这道题我们采用递归的思想来解决
递归的四条基本法则:

1.基准情形。必须有某些基准情形,它无需递归就能解出。
2.不断推进。对于那些需要递归求解的情形,每一次递归调用都必须要使求解的状况朝接近基准情形的方向推进。
3.设计法则。假设所有的递归调用都能运行。
4.合成效益法则。在求解同一个问题的同一实例时,切勿在不同的递归调用中做重复性的工作

关于递归:一定不要试图追踪大型递归的过程,关键是找出递归的方程式:也就是说要完成最后一步,那么最后一步的前一步要做什么。
(先进后出思想)在求f(n, other variables)的时候,你就默认f(n -1, other variables)已经被求出来了——至于怎么求的,这个是计算机通过回溯求出来的

如果只有一个圆盘,我们的解决很简单,将圆盘从A柱子移动到C柱子
在这里插入图片描述
如果是两个圆盘

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值