千家信息网

如何用Java递归来实现汉诺塔游戏

发表于:2024-09-23 作者:千家信息网编辑
千家信息网最后更新 2024年09月23日,今天就跟大家聊聊有关如何用Java递归来实现汉诺塔游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。我们很容易能想到,可以用递归来实现汉诺塔游
千家信息网最后更新 2024年09月23日如何用Java递归来实现汉诺塔游戏

今天就跟大家聊聊有关如何用Java递归来实现汉诺塔游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

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

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

public class HanoiDemo {    public static int hanoiCalledCount = 0;//成员变量记录操作次数     //汉诺塔游戏是一种二路递归    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。

看完上述内容,你们对如何用Java递归来实现汉诺塔游戏有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

0