汉诺塔问题

本文介绍了一个经典的编程问题——汉诺塔,并详细解析了如何利用递归思想解决该问题。通过逐步拆解,文章提供了具体的Java实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

汉诺塔问题是在编程时经常提到的一个问题,因为它在递归的使用方法有很强的代表性。它讲的是需要将N个盘子从A柱上通过B柱的辅助全部移动到C柱上,其间只有一个条件需要注意,那就是大盘子始终在小盘子下面。

如何用递归的思路来解决问题呢?方法很简单,其实我们其它的什么都不需要考虑,只需要这样想,假设现在有10只盘子,我只需要将上面的9只从A柱放到B柱上,而且是上小下大,这样就可以将第10只盘子从A柱放到C柱上了,再将那9只盘子通过A柱移动到C就可以了,至于那9只盘子如何移动,我们可以这样想,我们可以用和第10只盘子相同的方法,先将上面9只通过B柱移动到C柱,然后将第9只盘子从A移动到B,再将那8只通过A从C移动到B就可以了,依此类推,方法都是一样的。因此可以有这样的程序出现。

public   void  move( int  n , char  one , char  two,  char  three) {
if(n==1)
   System.out.println(
""+n+"只盘子由"+one+"--"+three);
else{
   move(n
-1, one , three , two);//将第n-1只盘子从one通过three移动到two;
   System.out.println(""+n+"只盘子由"+one+"--"+three);
   move(n
-1, two , one , three););//将第n-1只盘子从two通过one移动到three;

}

}

然后我们要做的就是通过一个主函数来调用这个方法就可以了。

public   class  HanN
{
  
public static void main(String [] args)
{
  HanN hn 
= new HanN();
  hn.move(
3,'A','B','C');
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值