栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java实现汉诺塔游戏(递归)(附超详细易懂注释)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java实现汉诺塔游戏(递归)(附超详细易懂注释)

  1. 我们很容易能想到,可以用递归来实现汉诺塔游戏。因为要将n(n>1)个盘子从“源”柱子移到“目标”柱子,我们要先把n-1个盘子从“源”柱子移到“辅助”柱子上,然后把最底下那一个盘子移到目标柱子上,最后把“辅助柱”上的n-1个盘子移动到目标柱子上。n==1时直接移到目标柱上,也是递归的出口。
  2. 有了以上思路的铺垫,就可以开始实现代码了。
  3. 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);
            }
        }
    }

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

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

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

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

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/590561.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号