当前位置: 首页 > article >正文

用递归函数实现汉诺塔游戏

1.是什么

        汉诺塔(Hanoi Tower)是一个经典的递归问题,描述了将一个由三根柱子组成的塔上的n个大小不一的圆盘从一个柱子移动到另一个柱子上的过程。每次移动只能移动一个圆盘,并且大圆盘不能放在小圆盘上面。


思路分析:

        当圆盘总数是5时,要将最底层的圆盘(最大的圆盘)放到c塔,那么就要其余的圆盘(num-1)放到B塔

        同理要想将4号盘放到B塔,就要将上面其余的盘放到C盘,最底层的5号盘先忽视

        同理,要想将3号盘放到C塔就要将上面的盘放到B塔

        同理,要将2号盘放到B塔就要将1号盘放到C塔


接下来是步骤演示:

到了这步骤已经堆好了以2为底的盘了,后面的步骤就是从A塔中拿出来的大盘为底盘再按顺序叠好

以3号为底的盘子按顺序(大到小)叠好,以此类推

这样,5号盘就可以放到C塔了,那么如果想将4号盘放到C塔,那么其余的盘子就要放到A塔


同理可得,要将3号盘放到A塔,那么上面的盘就要放到C塔

同理:


继续步骤:

每次从B塔中拿出来的大盘就要按照从大到小叠好

分析思路同理,这里就不叙说了


总结:这里细心的朋友就会发现了规律,奇数号盘为底盘时都是放在同一个塔(结合上面的图)这样,首先拿出的是1号盘(奇数盘)就可以判断应该放到哪个塔了

代码:

public class Test {
    public static void main(String[] args) {
        Test test = new Test();
        test.test(5, 'A', 'B', 'C');
    }
    public void test(int num, char a, char b, char c) {
        if (num == 1) {
            System.out.println(a + "---->" + c);
        } else {
            //理解为实参位置一一对应A,B,C
            test(num - 1, a, c, b);
            System.out.println(a + "---->" + c);
            test(num - 1, b, a, c);
        }
    }

}

解释:

 好啦,今天的干货就到这啦~    有什么建议或疑问的小伙伴欢迎到评论区留言!


http://www.kler.cn/news/317021.html

相关文章:

  • 使用命令行 (Anaconda Prompt)
  • Spring Boot | 使用 `@Scheduled`: 定时任务的实现与优化
  • MySQL和SQL的区别简单了解和分析使用以及个人总结
  • 面向对象 vs 面向过程
  • Unreal Engine 5 C++: 插件编写03 | MessageDialog
  • 线上搭子小程序:随时随地找搭子!
  • 详解Linux中cat命令
  • 软件开发详解:通过源码搭建高效的食堂采购与供应链管理平台
  • VOC2007数据集
  • Linux高级I/O:多路转接模型
  • 计算机毕业设计 校园志愿者管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • Linux进程间通信——Socket套接字
  • 计算机毕业设计 | SSM 凌云招聘平台 求职问答审批系统(附源码)
  • 【智能制造-32】通信冗余
  • win10 win11 设置文件权限以解决Onedrive不能同步问题
  • [Linux]:信号(下)
  • 计算机毕业设计 玩具租赁系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
  • Can‘t get Kerberos realm
  • 智能体趋势:未来科技的核心驱动力
  • 4款AI生成PPT工具推荐,提升工作效率
  • 6个Python小游戏项目源码【免费】
  • 前端常见面试-首页性能提升、项目优化
  • leetcode第二十六题:删去有序数组的重复项
  • JavaScript 中的日期与时间处理
  • 設置Android設備全局代理
  • Fastapi做成docker启动失败,需要启动线程。
  • vue3 快速入门系列 —— 基础
  • OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【内核通信机制】上
  • 第一个Java程序(二)
  • c++类中的特殊函数