对汉诺塔递归算法的简单理解

一.历史背景:汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘

二.递归算法:这里n,表示总共有几个盘子 ,a表示当前的塔,b表示中转塔,c表示目标塔,(注意:他们递归时,中转塔会,当前的塔,目标塔会改变)这里用一个静态变量sum,来记住盘子移动的次数。我画了一个图来帮助大家理解。

 

这里首先分为两种情况:1. 只有一个盘子直接把盘子从A移动到C。2.有很多盘子时(n个),移动盘子的递归思想可以大概直接抽象为: 把(n-1)个盘子看作一个整体,借助C塔 从A-->B(具体移动过程中靠函数递归来实现)再把最底部那个盘子,借助B塔A-->C。最后把(n-1)个盘子,借助A塔B-->C

三.具体代码如下:

public class Hanoi {
    public static int sum = 0;
    public static void hanoi(int n, String a, String b, String c) {
        /** n表示总共有几个盘子
         *  a表示当前的塔,b表示中转塔,c表示目标塔,(注意:他们递归时会改变)
         */
        if (n == 1) {
            System.out.println(a + "-->" + c);//每次移动到C塔,SUM来计数
            sum++;
        } else {
            hanoi(n-1, a, c, b );
            System.out.println(a + "-->" + c);
            sum++;
            hanoi(n-1, b, a, c);
        }
    }
    public static void main(String[] args) {
        hanoi(5, "Current", "transfer", "goal");
        System.out.println(sum);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/586550.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络安全是智能汽车下一个要卷的方向?

2024年一季度,中国汽车市场延续了2023年的风格,核心就是「卷」。 2023年,我国汽车市场爆发「最强价格战」,燃油车的市场空间不断被挤压,如今只剩下最后一口气。近日乘联会发布4月1-14日最新数据,新能源&am…

基于昇腾AI | 英码科技EA500I使用AscendCL实现垃圾分类和视频物体分类应用

现如今,人工智能迅猛发展,AI赋能产业发展的速度正在加快,“AI”的需求蜂拥而来,但AI应用快速落地的过程中仍存在很大的挑战:向下需要适配的硬件,向上需要完善的技术支持,两者缺一不可。 基于此&…

如何利用仪表构造InfiniBand流量在数据中心测试中的应用

一、什么是Infiniband? 在当今数据爆炸的时代,数据中心作为信息处理的中心枢纽,面临着前所未有的挑战。传统的通信方式已经难以满足日益增长的数据传输需求,而InfiniBand技术的出现,为数据中心带来了全新的通信解决方…

使用xshell工具连接ubuntu的root账户被拒绝的解决方法

问题描述: 我在使用xshell工具远程连接Ubuntu虚拟机的过程中,如果连接的是的普通用户则xshell工具可以正常连接,但是当我向连接ubuntu系统的root用户,即便是密码输入正确但还是不能连接成功。不能连接成功的截图如下: …

requests库进行接口请求

请求的常规写法 requests.post() 、requests.get() 从中可以看出: 必填参数: url可缺省参数: data,json等、关键字参数 **kwargs 如下进行了一个post请求的登录,且请求体在body中 知识点1 当为post请求时&#xff1…

建堆时间复杂度

片头 嗨!小伙伴们,大家好! 在上一篇中,我们学习了什么是堆,以及如何实现堆。这一篇中,我将继续带领大家来深入学习堆,准备好了吗?我要开始咯! 首先,大家还记…

opencv_17_翻转与旋转

一、图像翻转 1)void flip_test(Mat& image); 2)void ColorInvert::flip_test(Mat& image) { Mat dst; //flip(image, dst, 0); //上下翻转 flip(image, dst, 1); //左右翻转 // flip(image, dst, -1); //180度翻转 imsho…

VScode 无法连接云服务器

试了很多方法,比如更换VScode版本,卸载重装,删除配置文件 重启电脑,都无法成功。最后重置电脑后才连接上,但是重启服务器后又出现该问题。 方法一:修改环境 方法二:把vscode卸载干净重下

【快速入门】数据库的增删改查与结构讲解

文章的操作都是基于小皮php study的MySQL5.7.26进行演示 what 数据库是能长期存储在计算机内,有组织的,可共享的大量数据的集合。数据库中的数据按照一定的数据模型存储,具有较小的冗余性,较高的独立性和易扩展性,并为…

LabVIEW智能变电站监控系统设计与实现

LabVIEW智能变电站监控系统设计与实现 随着电力系统和智能化技术的快速发展,建立一个高效、可靠的变电站监控系统显得尤为重要。通过分析变电站监控系统的需求,设计了一个基于LabVIEW软件的监控平台。该平台利用虚拟仪器技术、传感器技术和无线传输技术…

数据结构中的栈(C语言版)

一.栈的概念 栈是一种常见的数据结构,它遵循后进先出的原则。栈可以看作是一种容器,其中的元素按照一种特定的顺序进行插入和删除操作。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做…

2024年的十大技术趋势 - AI 等等

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

网优小工具-基站ID行列转换

网优小工具-基站ID行列转换 因在日常工作需要对基站ID批量行转列,以方便在网管上批量筛选指定网元,该小工具基于微软Power Query插件编写,工具方便、简洁、易用,共享出来以方便工作。 工作界面 1.粘贴需筛…

学习VUE2第6天

一.请求拦截器 可以节流,防止多次点击请求 toast是单例 二.前置路由守卫 在Vue.js中,前置路由守卫是指在路由转换实际发生之前执行的钩子函数。这是Vue Router(Vue.js官方的路由管理器)提供的一种功能,允许开发者在用…

中兴UME网管LTE共享参数配置-PLMN添加

本文为中兴设备UME网管电联中频共享参数配置,PLMN添加参数配置部分,因UME与U31网管添加PLMN配置区别较大,UME网管需同时配置运营商EN-DC策略,相关配置流程及参数配置如下文。 PLMN eNodeB CU …

与 Apollo 共创生态:观看7周年大会的心路历程

前言 在科技飞速发展的今天,自动驾驶技术已然成为行业创新的热点之一。作为一名长期关注自动驾驶领域的技术人员,我有幸见证了Apollo平台的成长与壮大。七年前,Apollo的诞生为我们带来了无尽的想象与期待;七年后的今天&#xff0…

【自研网关系列】过滤器链 -- 灰度发布过滤器

🌈Yu-Gateway::基于 Netty 构建的自研 API 网关,采用 Java 原生实现,整合 Nacos 作为注册配置中心。其设计目标是为微服务架构提供高性能、可扩展的统一入口和基础设施,承载请求路由、安全控制、流量治理等…

【介绍下Unity编辑器扩展】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

ubuntu下安装配置python3.11

方案1 添加仓库: $ sudo add-apt-repository ppa:deadsnakes/ppa $ sudo apt update $ sudo apt install python3.11然后查看有多少个python版本已经安装了: ls -l /usr/bin/python*python2.7,python 3.8 ,python 3.11. 然后,设置系统默认…

Android4.4真机移植过程笔记(一)

1、RK源码编译 获取内核源码: git clone git172.28.1.172:rk3188_kernel -b xtc_ok1000 内核编译环境: 从172.28.1.132编译服务器的/data1/ZouZhiPing目录下拷贝toolchain.tar.gz(交叉编译工具链)并解压到与rk3188_kernel同级目…