Java递归来实现汉诺塔游戏,注释详细

网友投稿 276 2022-09-12


Java递归来实现汉诺塔游戏,注释详细

我们很容易能想到,可以用递归来实现汉诺塔游戏。因为要将n(n>1)个盘子从“源”柱子移到“目标”柱子,我们要先把n-1个盘子从“源”柱子移到“辅助”柱子上,然后把最底下那一个盘子移到目标柱子上,最后把“辅助柱”上的n-1个盘子移动到目标柱子上。n==1时直接移到目标柱上,也是递归的出口。

有了以上思路的铺垫,就可以开始实现代码了。

public class HanoiDemo {

public static int hanoiCalledCount = 0;//成员变量记录操作次数

//汉诺塔游戏是一种二路递归KuWiD

public static void main(String[] args) {

hanoi(3,"A","B","C");

System.out.println("执行"+hanoiCalledCount+"步");

}

public static void hanoi(int n,String source,String target,String assist){

if(n<=0){

System.out.println("n要大于零");

}

if(n==1){//递归的出口,n==1时直接移到目标柱上

System.out.printf("把一个盘子从%s柱子上移动到%s柱子上\n",source,target);

hanoiCalledCount++;//计数器加一

}else{

//先把n-1个盘子从“源”柱子移到“辅助”柱子上

hanoi(n-1,source,assist,target);

//把最底下那一个盘子移到目标柱子上

System.out.printf("把一个盘子从%s柱子上移动到%s柱子上\n",source,target);

hanoiCalledCount++;//计数器加一

//把“辅助柱”上的n-1个盘子移动到目标柱子上

hanoi(n-1,assist,target,source);

}

}

}

运行结果如下,大家可以尝试验证一下是否正确。

当n==2时,要操作3次

当n==3时,要操作7次

当n==4时,要操作15次

相信大家已经猜出规律了,操作次数==n^2-1

可见,随着盘子个数n的增加,操作次数以n^2增加,所以,自己玩汉诺塔游戏的是时候建议数字不要超过20。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Mikrotik-routeros命令行操作(持续更新)(mikrotik命令行配置)
下一篇:在爬虫使用过程中解决ip被封锁IP限制的几种方法(爬虫如何防止封ip)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~