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

 更新时间:2021年11月25日 17:17:39   作者:钢铁的面条  
这篇文章介绍了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 程序内部是如何执行的?

    Java 程序内部是如何执行的?

    这篇文章主要介绍了Java 程序内部是如何执行的,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • SpringBoot+Jpa项目配置双数据源的实现

    SpringBoot+Jpa项目配置双数据源的实现

    本文主要介绍了SpringBoot+Jpa项目配置双数据库源的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • SpringBoot基于Mybatis-Plus自动代码生成

    SpringBoot基于Mybatis-Plus自动代码生成

    这篇文章主要介绍了SpringBoot基于Mybatis-Plus自动代码生成,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Map与JavaBean相互转换的工具类 

    Map与JavaBean相互转换的工具类 

    这篇文章主要介绍了Map与JavaBean相互转换的工具类,在做导入的时候,遇到了需要将map对象转化 成javabean的问题,也就是说,不清楚javabean的内部字段排列,只知道map的 key代表javabean的字段名,value代表值,需要的朋友可以参考下
    2022-02-02
  • Java Benchmark 基准测试的实例详解

    Java Benchmark 基准测试的实例详解

    这篇文章主要介绍了Java Benchmark 基准测试的实例详解的相关资料,这里提供实例帮助大家学习理解这部分内容,需要的朋友可以参考下
    2017-08-08
  • JSP 获取spring容器中bean的两种方法总结

    JSP 获取spring容器中bean的两种方法总结

    这篇文章主要介绍了JSP 获取spring容器中bean的方法总结的相关资料,需要的朋友可以参考下
    2017-05-05
  • 解决Android Studio安装后运行出错dose not...和Internal error...

    解决Android Studio安装后运行出错dose not...和Internal error...

    这篇文章主要介绍了解决Android Studio安装后运行出错dose not...和Internal error...的相关资料,需要的朋友可以参考下
    2017-03-03
  • java 中createStatement()方法的实例详解

    java 中createStatement()方法的实例详解

    这篇文章主要介绍了java 中createStatement()方法的实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • @ComponentScan注解用法之包路径占位符解析

    @ComponentScan注解用法之包路径占位符解析

    这篇文章主要介绍了@ComponentScan注解用法之包路径占位符解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • eclipse启动一个Springboot项目

    eclipse启动一个Springboot项目

    本文主要介绍了eclipse启动一个Springboot项目,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08

最新评论