C语言——递归实现汉诺塔游戏
归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言📝
比别人多一点努力,你就会多一份成绩!
引言:
相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。
一、分析:
分析:对于这样一个问题,任何人都不可能直接写出移动盘子的每一步,但我们可以利用下面的方法来解决。设移动盘子数为n,为了将这n个盘子从A杆移动到C杆,可以做以下三步:
(1)以C盘为中介,从A杆将1至n-1号盘移至B杆;
(2)将A杆中剩下的第n号盘移至C杆;
(3)以A杆为中介;从B杆将1至n-1号盘移至C杆。
二、递归解决问题:
这样问题解决了,但实际操作中,只有第二步可直接完成,而第一、三步又成为移动的新问题。以上操作的实质是把移动n个盘子的问题转化为移动n-1个盘,那一、三步如何解决?事实上,上述方法设盘子数为n, n可为任意数,。该法同样适用于移动n-1个盘因此,依据上法,可解决n -1个盘子从A杆移到B杆(第一步)或从B杆移到C杆(第三步)问题。现在,问题由移动n个盘子的操作转化为移动n-2个盘子的操作。依据该原理,层层递推,即可将原问题转化为解决移动n -2、n -3… … 3、2,直到移动1个盘的操作,而移动一个盘的操作是可以直接完成的。至此,我们的任务算作是真正完成了。而这种由繁化简,用简单的问题和已知的操作运算来解决复杂问题的方法,就是递归法。在计算机设计语言中,用递归法编写的程序就是递归程序。
三、代码附上:
#include<stdio.h>
void move(char x,char y);
void honi(int n,char x,char y,char z);
int main(){int n;scanf("%d",&n);honi(n,'A','B','C');return 0;
}
void move(char x,char y){printf("%c-->%c\n",x,y);
}
void honi(int n,char x,char y,char z){if(n==1){move(x,z);}else{honi(n-1,x,z,y);move(x,z);honi(n-1,y,x,z);}
}
四、体验游戏:
汉诺塔小游戏 (fuyeor.com)
https://apps.fuyeor.com/zh-cn/games/hanoi/
五、总结:
递归法,利用一个问题与其子问题的递推关系来解决问题,通常把一个问题层层转化为一个原问题相同或相似的但规模较小的子问题来求解。
递归在解决某些问题时,是一个非常有用的方法,它可以使某些看起来不容易解决的问题变得容易解决,写出程序也比较简洁。但是递归通常要花较多的机器时间和占用较多的储存空间。
最后,希望本篇文章对你有所帮助,也希望可以支持支持博主,后续博主也会定期更新学习记录,记录学习过程中的点点滴滴。若这篇文章中有哪些不正确的内容,欢迎大家在评论区和我交流讨论!
相关文章:
C语言——递归实现汉诺塔游戏
归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言📝 比别人多一点努力,你…...
使用MONAI轻松加载医学公开数据集,包括医学分割十项全能挑战数据集和MedMNIST分类数据集
在深度学习中,使用公开数据集具有以下优点: 提供了一个标准化的基准来比较不同算法或模型的性能,因为这些公共数据集被广泛使用,许多研究人员都使用它们来评估他们的方法。可以节省大量的时间和金钱,因为这些数据集已…...
dvwa 代码注入impossible代码审计
dvwa 代码注入impossible代码审计 <?phpif( isset( $_POST[ Submit ] ) ) {// Check Anti-CSRF tokencheckToken( $_REQUEST[ user_token ], $_SESSION[ session_token ], index.php ); // 检查token值是否正确// Get input$target $_REQUEST[ ip ]; $target stripslas…...
909-2015-T1
文章目录 1.原题2.算法思想3.关键代码4.完整代码5.运行结果 1.原题 线性表使用公式化描述方式存储。编写一个函数,从一给定的线性表A中删除值在x ~ y(x到y,x<y)之间的所有元素,要求以较高的效率来实现。提示&#…...
selenium下载安装对应的chromedriver并执行
文章目录 selenium对应版本chrome驱动下载114以及之前的chrome版本119/120/121的chrome版本 chromedriver安装执行selenium代码 selenium Selenium是广泛使用的模拟浏览器运行的库,它是一个用于Web应用程序测试的工具。 Selenium测试直接运行在浏览器中,…...
1.什么是Angular?
Angular Angular 是一个应用设计框架与开发平台,旨在创建高效而精致的单页面应用。 什么是Angular? Angular 是一个基于 TypeScript 构建的开发平台。它包括: 一个基于组件的框架,用于构建可伸缩的 Web 应用。一组完美集成的库&am…...
Qt ListWidget
先创建QListWidgetItem: QListWidgetItem* pListItem1 new QListWidgetItem(QIcon(":/resources/editor.png"),u8"editor");QListWidgetItem* pListItem2 new QListWidgetItem(QIcon(":/resources/env.png"),u8"env");Q…...
微服务实战系列之加密RSA
前言 在这个时代,我们选择的人生目标已丰富多彩,秉持的人生态度也千差万别: 除了吃喝玩乐,还有科技探索; 除了CityWalk,还有“BookWalk”; 除了走遍中国,还有走遍世界; …...
Centos 里面为什么有的磁盘命名/dev/vda 有的是/dev/sda ?
环境: Centos7.9 问题描述: Centos 里面为什么有的磁盘命名/dev/vda 有的是/dev/sda ? 解决方案: 1.盘命名为/dev/vda或/dev/sda的差异主要取决于系统的安装方式和硬件架构。 /dev/sda是传统的磁盘命名方案,用于标识IDE、S…...
P9232 [蓝桥杯 2023 省 A] 更小的数(区间DP)
求大数字某连续部分反转后,比原数字小的个数 思路:自前向后遍历 ai是位于数字第i位的数字 aj是位于数字第j位的数字(i<j) ai>aj f[ai][aj]1; ai<aj f[ai][aj]0; aiaj f[ai][aj]f…...
【ArcGIS Pro二次开发】(77):ArcGIS Pro中图层的获取与解析
一、最简单的获取图层方式 通常情况下,如果要获取当前地图中的图层,可以用2种方法获取。 以下图为例: 一种是【map.Layers】属性获取,结果如下: 可以看出,这里只获取到了第一层级的图层,图层组…...
Robust Optimization, imperfect CSI, CSIT and CSIR
文章目录 写在前面CSI, CSIT and CSIR 写在前面 CSIT或者CSIR可不可以用来帮助实现隐蔽通信 人工噪声让窃听者估计出错误的信道。 CSI, CSIT and CSIR MIMO Minimum Total MSE Transceiver Design With Imperfect CSI at Both Ends 2009 TSP 多输入多输出 (MIMO) 系统已成为…...
【数据结构】栈详解
目录 1. 前言2. 栈2.1 栈的概念及结构2.2 如何实现栈2.3 数组栈实现2.3.1 top怎么确定2.3.2 栈顶插入2.3.2.1 栈顶插入分析2.3.2.2 栈顶插入代码实现 2.3.3 栈顶删除2.3.4 判空2.3.4.1 分析2.3.4.2 代码实现 2.3.5 栈的元素个数2.3.6 栈销毁2.3.7 栈访问数据 3. 源代码3.1 Stac…...
大结局!OpenAI创始人奥特曼和 Greg Brockman 将加入微软!!!
持续48小时的OpenAI政变大戏终于迎来了大结局! 微软堪称最大赢家💥💥💥 微软CEO刚刚宣布: 我们仍然致力于与 OpenAI 的合作伙伴关系,并对我们的产品路线图、我们在 Microsoft Ignite 上宣布的一切继续创…...
Linux QT交叉编译环境安装
参考链接 linux交叉编译Qt_linux qt 交叉编译-CSDN博客 关键点:编译脚本,放在qt源代码根目录的.sh文件 #!/bin/shcd ./qt-everywhere-src-5.12.9./configure -prefix /home/qsqya/compile/qt5.12.9/build \ -opensource \ -release \ -confirm-license…...
媲美有线操作,支持4KHz响应和无线充电的游戏鼠标,雷柏VT3S上手
对于无线鼠标来说,操作延迟和精度对游戏操作影响很大,常见的游戏鼠标至少都有1KHz的回报率,而雷柏今年已经出了很多支持4KHz回报的鼠标了,像是我现在用的这款VT3S游戏鼠标,就搭载了旗舰级的原相3395引擎,支…...
【Flask使用】全知识md文档,4大部分60页第3篇:状态cookie和session保持
本文的主要内容:flask视图&路由、虚拟环境安装、路由各种定义、状态保持、cookie、session、模板基本使用、过滤器&自定义过滤器、模板代码复用:宏、继承/包含、模板中特有变量和函数、Flask-WTF 表单、CSRF、数据库操作、ORM、Flask-SQLAlchemy…...
类方法,静态方法和实例方法的区别及应用场景
在 Python 中,有三种不同类型的方法:实例方法、类方法和静态方法。它们各自有不同的特点和应用场景: 实例方法(Instance Method): 实例方法是最常见的方法类型,在方法定义中第一个参数通常被命…...
CleanMyMac X4.16免费版mac电脑一键清理电脑垃圾工具
但是,我最近发现随着使用时间的增加,一些奇奇怪怪的文件开始占据有限的磁盘空间,存储空间变得越来越小,系统占用空间越来越大,越来越多的无效文件开始影响我电脑的运行速度。 Mac的文件管理方式和Windows不太一样&…...
汽车级低压差稳压器LDO LM317BD2TR4G原理、参数及应用
LM317BD2TR4G主要功能特性分析 : LM317BD2TR4G 低漏 (LDO) 线性电压稳压器是一款可调 3 端子正向 LDO 电压器,能够在 1.2 V 至 37 V 的输出电压范围内提供 1.5 A 以上的电流。此电压稳压器使用非常简便,仅需两个外部电阻即可设置输出电压。另…...
LSI转型启示:从PowerPC到ARM架构的通信处理器战略演进
1. 从垂直整合到无晶圆厂:LSI的转型之路 在半导体这个行当里待久了,你会发现一个有趣的现象:那些能活下来并且活得不错的公司,往往不是技术最激进的,而是最能适应变化的。LSI(LSI Corporation,后…...
Rust构建跨平台AI桌面应用:PoleStar Chat的多机器人协同与本地化实践
1. 项目概述:一个用Rust重写的跨平台AI聊天桌面应用如果你和我一样,每天的工作流里离不开ChatGPT、Claude或者Gemini,那你肯定也受够了在浏览器标签页之间来回切换,或者忍受着某些官方客户端那捉襟见肘的功能和时不时卡顿的体验。…...
CC-Switch 下载、安装与使用全指南(2026.5.7--最新v3.14.1)
CC-Switch 下载、安装与使用全指南(2026最新v3.14.1) CC-Switch 是跨平台AI API一键切换管理器,统一管理 Claude Code、DeepSeek、Kimi、智谱、MiniMax 等模型,不用改环境变量、不用手动改配置文件,VS Code/终端一键切…...
全程可视、零干扰:非侵入式 SRT 监控详解
什么是非侵入式监控 非侵入式监控是一种不会中断信源与接收器之间现有会话的监控方式。 换言之,监控探针不会与信源建立单独的会话,也不会像中继/代理解决方案那样创建中间会话。 优势 探针监控的会话正是待观测的目标会话。探针不创建第二个会话&am…...
Nginx 入门教程(安装、反向代理、负载均衡、动静分离)
一、Nginx 简介1. 什么是 Nginx?Nginx(发音 engine x)是一款由俄罗斯开发的 高性能 Web 服务器、反向代理服务器,采用 C 语言编写,具有占用内存少、并发能力强的特点,在高并发场景下表现优异。2. Nginx 的主…...
别再复制粘贴了!手把手教你用CPLEX OPL从零搭建第一个优化模型(附完整代码)
从零开始:用CPLEX OPL构建你的第一个生产优化模型 每次看到那些复杂的优化问题,你是不是总想直接复制粘贴代码?但真正解决问题时,却发现自己连最基本的模型结构都搞不清楚。今天我们就来彻底改变这种状况——我将带你从零开始&…...
灵珠AI日均token消耗破50亿:深度用户或成AI应用护城河
一个首次内测刚上线两周多、用户规模尚不算庞大的AI创作平台,日均token(词元)消耗量却悄然突破了50亿——这组看似矛盾的数据,正在引发行业对AI应用深度的新思考。近日,上海的零门槛AI创作平台“灵珠”透露,…...
3D模型体积计算终极指南:掌握STL文件分析与材料估算
3D模型体积计算终极指南:掌握STL文件分析与材料估算 【免费下载链接】STL-Volume-Model-Calculator STL Volume Model Calculator Python 项目地址: https://gitcode.com/gh_mirrors/st/STL-Volume-Model-Calculator 在3D打印和数字制造领域,准确…...
海南能量阀厂家
在当今流体控制领域,能量阀的重要性日益凸显。海南地区也有不少能量阀厂家崭露头角,为众多项目提供着关键的设备支持。今天,我们也会着重提到在行业中表现出色的天津水阀机械有限公司,它的产品同样具备诸多优势,值得关…...
从金融到政务:运维智能体行业落地实战与价值证明
最好的技术,一定能在真实场景中创造可量化价值。 Lerwee运维智能体已在金融、交通、制造、政务等行业规模化落地,服务 1000 客户,覆盖核心业务与关键基础设施。 本文选取四大标杆案例,还原真实痛点、架构设计、落地过程与价值成果…...


