纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

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

钢铁的面条   2021-11-25 我要评论
想了解Java递归来实现汉诺塔游戏,注释详细的相关内容吗钢铁的面条在本文为您仔细讲解Java汉诺塔游戏的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Java实现汉诺塔,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


相关文章

猜您喜欢

  • C平分七筐鱼 C语言趣味编程之平分七筐鱼

    想了解C语言趣味编程之平分七筐鱼的相关内容吗小辉_Super在本文为您仔细讲解C平分七筐鱼的相关知识和一些Code实例欢迎阅读和指正我们先划重点:C语言平分7筐鱼,C平分7筐鱼算法,C语言趣味编程下面大家一起来学习吧..
  • Android友好崩溃界面 Android实现友好崩溃界面

    想了解Android实现友好崩溃界面的相关内容吗幸福de小阳在本文为您仔细讲解Android友好崩溃界面的相关知识和一些Code实例欢迎阅读和指正我们先划重点:Android,崩溃界面下面大家一起来学习吧..

网友评论

Copyright 2020 www.eleasoftware.com 【绿软下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式