《经典递归问题:汉罗塔》

🌠作者:@TheMythWS.

🎆专栏:《JavaSE》

🎇座右铭:不走心的努力都是在敷衍自己,让自己所做的选择,熠熠发光。

目录

✨汉罗塔的介绍

图解游戏​

✨N层汉罗塔需移动的次数

✨汉罗塔的代码实现 

c语言实现:

运行结果:

 java语言实现:

运行结果:


✨汉罗塔的介绍

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

图解游戏

✨N层汉罗塔需移动的次数

✨汉罗塔的代码实现 

c语言实现:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
/*
思路1:*      将1~N层从A->B,     A为源,B为目的,C作为辅助 角色在变化*      等价于*      1、把1~1-N层从A->C,A为源,B为辅助,C为目的*      2、把第N层从A->B*      3、把1~N-1层从C->B,A为辅助,B为目的,C为源
思路2:*      将1~N层从A->C,     A为源,B作为辅助,C为目的 角色在变化*      等价于*      1、把1~1-N层从A->B,A为源,B为目的,C为辅助*      2、把第N层从A->C*      3、把1~N-1层从B->C,A为辅助,B作为源,C作为目的
*/
/*将N个盘子从source移动到target的路径的打印N      初始的N个从小到大的盘子,N是最大编号from   原始柱子to     目标柱子help   辅助的主子*/
//思路1
void printHannoiTower1(int n, char from[], char to[], char help[]) {//将1~N层从A->B,     A为源,B为目的,C作为辅助 角色在变化if (n == 1) {printf("move %d from %s to %s\n", n, from, to);//把第N层从A->Breturn;}else {printHannoiTower1(n - 1, from, help, to);//把1~1-N层从A->C,A为源,B为辅助,C为目的printf("move %d from %s to %s\n", n, from, to);//N可以顺利达到target,只需要1步完成printHannoiTower1(n - 1, help, to, from);//把1~N-1层从C->B,A为辅助,B为目的,C为源}
}
//思路2
void printHannoiTower2(int n, char from[], char help[], char to[]) {//将1~N层从A->C,     A为源,B作为辅助,C为目的 角色在变化if (n==1) {printf("move %d from %s to %s\n", n, from, to);//把第N层从A->Creturn;}else {printHannoiTower2(n - 1, from, to, help);//把1~1-N层从A->B,A为源,B为目的,C为辅助printf("move %d from %s to %s\n", n, from, to);//N可以顺利达到target,只需要1步完成printHannoiTower2(n - 1, help, from, to);//把1~N-1层从B->C,A为辅助,B作为源,C作为目的}
}
int main()
{printHannoiTower1(3, "A", "B", "C");printf("------------------\n");printHannoiTower2(3, "A", "B", "C");return 0;
}

运行结果:

 java语言实现:

package com.themyth.test;
/*** 找重复:*      1.找到一种划分方法*      2.找到递推公式或者等价转化*      都是父问题转化为求解子问题* 找变化的量:*      变化的量通常要作为参数* 找出口:*      根据参数变化的趋势,对边界进行控制,适时终止递归*思路1:*      将1~N层从A->B,     A为源,B为目的,C作为辅助 角色在变化*      等价于*      1、把1~1-N层从A->C,A为源,B为辅助,C为目的*      2、把第N层从A->B*      3、把1~N-1层从C->B,A为辅助,B为目的,C为源* 思路2:*      将1~N层从A->C,     A为源,B作为辅助,C为目的 角色在变化*      等价于*      1、把1~1-N层从A->B,A为源,B为目的,C为辅助*      2、把第N层从A->C*      3、把1~N-1层从B->C,A为辅助,B作为源,C作为目的**/
/*** 将N个盘子从source移动到target的路径的打印*N      初始的N个从小到大的盘子,N是最大编号from   原始柱子to     目标柱子help   辅助的主子*/
public class 汉诺塔 {public static void main(String[] args) {//思路1:C作为辅助printHannoiTower1(3,"A","B","C");System.out.println("----------------------------");//思路2:B作为辅助printHannoiTower2(3,"A","B","C");}//注意角色的变化private static void printHannoiTower1(int N, String from, String to, String help) {//    from源、to目的、help辅助if (N == 1) {System.out.println("move " + N + " from " + from + " to " + to);return;}else {printHannoiTower1(N-1,from,help,to);//   先把N-1个盘子移动到辅助空间上去,源、辅助、目的System.out.println("move " + N + " from " + from + " to " + to);//  N可以顺利达到target,只需要1步完成printHannoiTower1(N-1,help,to,from);// 让N-1从辅助空间回到源空间上,辅助、目的、源}}private static void printHannoiTower2(int N, String from, String help, String to) {//    from源、help辅助、to目的if (N == 1){System.out.println("move " + N + " from " + from + " to " + to);return;}else {printHannoiTower2(N-1,from,to,help);//   先把N-1个盘子移动到辅助空间上去,源、目的、辅助System.out.println("move " + N + " from " + from + " to " + to);//  N可以顺利达到target,只需要1步完成printHannoiTower2(N-1,help,from,to);// 让N-1从辅助空间回到源空间上,辅助、源、目的}}
}

运行结果:

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用类比方式学习编程中函数递归(个人理解仅供参考)(内含汉诺塔问题的求解)

目录 1.前言 2.递归的数学模型 3.相关的c语法 4.将递归的数学模型写成编程语言 5.利用类比方法将实际问题的代码写成函数递归的形式 例1: 例2: 6.汉诺塔问题的求解 1.前言 本人在学习函数递归编程方法的过程中&#xff0c;发现用类比的方式学习递归法可帮助我们在各种编…

我想,有间花房

你带我走进你的花房&#xff0c;我无法逃脱花的清香&#xff0c;我不知不觉忘记了方向&#xff0c;你说我世上最坚强&#xff0c;我说你世上最善良&#xff0c;你不知不觉和花儿一样 也许每一位 爱花的姑娘&#xff0c;都想有一间属于自己 的花 房 &#xff0c;在悠闲的午后&am…

花房集团CEO于丹内部信:上市即暴富年代已一去不复返

雷递网 乐天 12月12日 花椒母公司花房集团&#xff08;股票代码为&#xff1a;“03611”&#xff09;今日在港交所上市&#xff0c;发行价为2.8港元&#xff0c;募资净额为7240万港元。 花房集团开盘价为3.29港元&#xff0c;较发行价上涨17.5%&#xff1b;截至目前&#xff0c…

花房集团上市:市值超30亿港元 周鸿祎连收两个香港IPO

雷递网 雷建平 12月12日 花椒母公司花房集团&#xff08;股票代码为&#xff1a;“03611”&#xff09;今日在港交所上市&#xff0c;发行价为2.8港元&#xff0c;募资净额为7240万港元。 花房集团开盘价为3.29港元&#xff0c;较发行价上涨17.5%&#xff1b;截至目前&#xff…

花房集团上市,走向元宇宙新征程

12月12日&#xff0c;花房集团在港交所成功上市&#xff0c;首日便受到追捧&#xff0c;当日最高涨幅达28.75%。 继360、360数科、鲁大师后&#xff0c;这是“红衣教主”周鸿祎收获的第四个IPO。 花房集团作为直播界元老之一&#xff0c;两年内三次申请IPO&#xff0c;终于在…

花房集团:直播老将终赴IPO

寒冬之下&#xff0c;花房集团如何破局&#xff1f; 12月12日&#xff0c;直播界“元老”花房集团&#xff08;下称“花房”&#xff0c;03611.HK&#xff09;正式挂牌港交所。 花房此次IPO发行价为2.8港元/股&#xff0c;募资净额为7240万港元&#xff0c;开盘价为3.29港元/…

如果金融男和IT男同时追你,你选谁?

对于金融女心仪对象排行榜的前两名&#xff0c; 金融男和IT男的地位是不可动摇了&#xff0c; 要说两个行业的不同之处 &#xff0c; 最大的区别在于一个是经济领域&#xff0c; 一个是产业领域 而另一个区别呢&#xff1f; 当然是从事这两种行业的人群不同啦&#xff0c; 具…

会泡妞的程序员都是怎么撩妹子的?

来自&#xff1a;这个好玩吗 链接&#xff1a;https://www.cnblogs.com/lzjtdxfxl/p/5493039.html 传说&#xff0c;每一个程序员上辈子都是折翼的天使 身体好、智商高、逻辑思维能力强 挣得多、花得少、死得还比对方早 王者级的程序员是有情怀的 在他&#xff08;她&#xff0…

软考必备资料大放送,全科目软考资料都给你备好了!

软考作为IT领域的国家级证书 可以积分落户、评职称、抵个税…含金量高 现在有越来越多的人加入了软考的备考大军 新一轮的软考考试马上要开始了 你准备好了吗&#xff1f; 下面是给大家整理好的软考备考资料包 上面展示的资料只是冰山一角&#xff0c;软考科目众多&#…

【广工考试笔记】计算机网络考试速成笔记

范围 网络协议&#xff0c;服务 网络四层协议的功能与包含的协议 数据链路层 差错检测 &#xff0c;物理地址&#xff0c;以太网&#xff0c;局域网的扩展&#xff0c; 物理层 数据传输速度&#xff0c;频率&#xff0c;波长&#xff0c;速度&#xff0c;编码 网络层&…

《软考填涂答题卡须知》

考试临近&#xff0c;今天主要是给大家说下答题卡的填涂注意事项&#xff0c;希望考生们看完后可以避免一些小失误。除信息处理技术员和多媒体应用制作技术员采取笔试与上机操作考试相结合的形式外&#xff0c;其他各种考试都采用笔试形式。考试实行全国统一大纲、统一试题、统…

考试管理系统

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 模块划分&#xff1a;老师模块、班级模块、学生模块、课程模块、试题模块、试卷模块、 组卷模块、考试模块、答题模块 管…

【CSP考前复习】关于考试时的注意事项

前言 作为一名已经服役4年的老年OI选手&#xff0c;经历过的考试已经是数以百计了。在这么多次考试中&#xff0c;爆零垫底是常有的事&#xff0c;运气好了靠暴力得到好名次的事也经常发生。那么&#xff0c;CSP临近&#xff0c;我想有必要好好整理一下这些问题和经验。 一、…

CKA OFFCIAL TEST准备工作考试说明练习题

文章目录 1. 准备工作1.1 证书详情1.2 考试注意事项 2. 考试说明2.1 考试环境2.2 考试期间允许的资源2.3 考试技术说明2.4 可接受的测试地点2.5 其他资源2.A 考试小提示 3. 练习题Task 1. RBAC - role based access control&#xff08;4/25%&#xff09;Task 2. drain - highl…

CCNA考试流程、考试费用及考场介绍

4月15日CCNAHCIA新一轮班级开班 CCNA&#xff08;Cisco Certified Network Associate&#xff09;思科认证网络工程师 一、CCNA认证考试流程 ccna考试认证&#xff0c;先学习CCNA理论知识&#xff0c;然后下载CCNA考试题库&#xff0c;预约考试&#xff0c;参加并通过考试。 C…

股票ctp交易接口是什么?

股票ctp交易接口是什么&#xff1f;CTP接口除官方发布的C动态库外&#xff0c;很多人也提供了Python、Java、C#等各主流语言的接口&#xff0c;可搜索相应的开发方法。一个连接能够查询的股票数量是有限的&#xff0c;性能也不高&#xff0c;但是可以创建多个api实例并发工作&a…

美股投资指南 – 网上美股开户其实很简单

美股开户教程 – 从香港招行到Firstrade 犹豫再三&#xff0c;觉得还是把这帖子贴在这里吧&#xff0c;文章是我写在自己新开的博客里的&#xff0c;分上下两篇&#xff0c;记录自己在美股开户中碰到的问题&#xff0c;写的不咋怎么样都是粗记录&#xff0c;既然成文就公布吧&a…

阿里云Redis之:为阿里云Redis申请公网地址(十九)

1.申请公网地址 1)点击实例信息—>找到连接信息—>找到公网访问—>申请连接地址 2)填写外网连接地址,然后填写端口号,最后点击确定。 3)外网地址申请成功 2.通过Redis客户端连接云Redis 阿里云官方反馈公网地址不能通过Redis Desktop Manager连接,存在兼容性问…

阿里云申请域名及域名配置https

1、阿里云域名申请 买到域名之后&#xff0c;要对域名进行实名认证&#xff08;上传身份证并拍照&#xff09;&#xff08;阿里云审核一天&#xff09; 2、域名工信部备案 1、阿里云域名备案&#xff0c;这个也要实名认证&#xff0c;其中阿里云员工审核并打电话&#xff08;…

天池_阿里音乐流行趋势预测大赛(1) —— 赛题分析

本文以天池大数据竞赛的阿里音乐流行趋势预测大赛为背景&#xff0c;将机器学习实战的背景、模型、算法、代码和结果等都整理下来&#xff0c;放在博客中&#xff0c;算是对自己知识的整理吧&#xff0c;有兴趣的朋友也可以看看一起讨论学习。 由于很多比赛和项目是由第三方提…