汉诺塔递归算法(C语言)

C语言汉诺塔--递归算法 问题描述:   有一个梵塔,塔内有三个座A、B、C,A座上有诺干个盘子,盘子大小不等,大的在下,小的在上(如图)。 把这些个盘子从A座移到C座,中间可以借用B座但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘 子始终保持大盘在下,小盘在上。 描述简化:把A柱上的n个盘子移动到C柱,其中可以借用B柱。 大一学习了C语言,当时不是很理解递归,这个学期在《算法设计 阅读详情

一、引言

汉诺塔问题是一个经典的数学谜题,它是在印度流传下来的,传说中有一个 temple 上有三个塔座,塔座上有64个圆盘,从小到大依次放在一个底座上。玩法是将 towers 中的圆盘移到目标座,借助辅助座,搬动规则是一次只能移动一个圆盘,且在移动过程中,大盘不能放在小盘上。这就是著名的汉诺塔问题。

在计算机科学领域中,汉诺塔问题已成为经典的算法问题。本文介绍如何用 C 语言来实现汉诺塔递归算法。

二、解决汉诺塔问题

(1)递归算法

递归算法是解决汉诺塔问题的一种常用方法。对于汉诺塔问题,在实现递归算法时,需要将整个问题的分解过程分为三步:
1、将前 n-1 个圆盘从起始柱移到辅助柱;
2、将第 n 个圆盘从起始柱移到目标柱;
3、将前 n-1 个圆盘从辅助柱移到目标柱。

这个过程可以视为一个递归问题,即问题的求解可以由求解子问题来完成。我们可以写一个递归函数 hanoi(n, A, B, C),其中 n
表示圆盘的数量,A、B、C 分别表示三个柱子。

三、C语言实现

(1)代码实现

void hanoi(int n,char from,char buf,char to) 
{
    if(n == 1) // 圆盘数量为1时直接从起始柱移到目标柱
    {  
        printf("move from %c to %c\n",from,to);
    } else 
    {
        hanoi(n-1, from, to, buf);  // 将前 n-1 个圆盘从起始柱移到辅助柱
        printf("move from %c to %c\n",from,to);  // 将第 n 个圆盘从起始柱移到目标柱
        hanoi(n-1, buf, from, to);  // 将前 n-1 个圆盘从辅助柱移到目标柱
    }
    return;
}

(2)算法思想

将 n-1 个盘子从源柱移动到辅助柱上,然后把第 n 个盘子移动到目的柱上,最后再将 n-1个盘子从辅助柱移动到目的柱上,每次移动都可以按照相同的方式递归实现。

四、结论

本文介绍了汉诺塔递归算法的实现方法,包括算法思路和代码实现。通过使用递归算法可以更便捷地解决汉诺塔问题,同时也有实际应用价值。
在这里插入图片描述

【数据结构与算法】汉诺塔算法——C语言递归实现 汉诺塔的递归实现算法,将A中的圆盘借助B圆盘完全移动到C圆盘上, 每次只能移动一个圆盘,并且每次移动时大盘不能放在小盘上面 递归函数的伪算法为如下: if(n == 1)    直接将A柱子上的圆盘从A移动到C else    先将A柱子上的n-1个圆盘借助C柱子移动到B柱子上    直接将A柱子上的第n个圆盘移动到C柱子上    最后将B柱子上的n-1个圆盘借助A柱子移动到C柱子 阅读详情

相关推荐

数据结构递归算法-汉诺塔问题C语言实现

数据结构递归算法-汉诺塔问题C语言实现 本问题的核心不是让你搞清楚解决汉诺塔问题的每一步,而是如何由汉诺塔解法转化为我们的递归代码 递归算法切莫想要全盘搞清每一步,这就需要我们熟练掌握递归框架,这样才能快速由解法实现我们的递归算法,核心点在于操作方法的确定,极端情况导出递归的步骤,以及递归出口的确定 问题描述 /*有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个 金盘(如下图)...

JunsIr的技术栈 1904

汉诺塔——递归算法(c语言实现)

真的很难,自己总结一下,方便自己看也分享给各位。

m0_74389379的博客 1万+

第三篇:汉诺塔算法——C语言递归实现

汉诺塔的递归实现算法,将A中的圆盘借助B圆盘完全移动到C圆盘上, 每次只能移动一个圆盘,并且每次移动时大盘不能放在小盘上面 递归函数的伪算法为如下: if(n == 1)    直接将A柱子上的圆盘从A移动到C else    先将A柱子上的n-1个圆盘借助C柱子移动到B柱子上    直接将A柱子上的第n个圆盘移动到C柱子上    最后将B柱子上的n-1个圆盘借助A柱子移动到C柱子

u012426327的专栏 3728

汉诺塔游戏

汉诺塔游戏: 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 #背景介绍 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的

qq_45625194的博客 1146

【C语言】递归详解汉诺塔问题

递归 + 图解详细讲解汉诺塔移动次数和打印的过程

StackFrame 2万+

Windows版MySQL8.4.2LTS解压直用(下载免安装-绿色-项目打包直接使用-含卸载)

安装前运行微软常用运行库全集(也可能称为依赖)关于MySQL8中相关参数配置,可通过。选择8.5.2LTS长期服务版。选中密码,右键会直接复制。

xzzteach的博客 1431

数据结构之递归——汉诺塔问题(C语言)

一、递归的定义 递归定义是数理逻辑和计算机科学用到的一种定义方式,使用被定义对象的自身来为其下定义(简单说就是自我复制的定义)。递归定义亦称归纳定义,一种实质定义,指用递归的方法给一个概念下的定义。 (汉诺塔:是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。) 二、代码功能 1、.

C2395850595的博客 2326

EtherCat 从站开发中遇到的问题分享

EtherCat从站 AX58100

yu_arius的博客 2046

C语言入门递归算法——汉诺塔(简单易懂,最后还有汉诺塔游戏)

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

W20223161730的博客 7840

「大模型学习」(14)Long Context之线性插值、NTK-aware、Yarn、LongRoPE

大语言模型长上下文扩展中的位置插值技术 摘要:为解决大语言模型(LLMs)在推理阶段扩展上下文窗口时的位置编码限制,研究人员开发了一系列位置插值技术。这些方法主要针对旋转位置编码(RoPE)机制,通过不同策略调整位置索引以适应超出训练长度的上下文。典型方法包括:基础位置插值(PI)均匀缩放位置索引;NTK-aware插值对不同频率维度差异化处理;NTK-by-parts插值根据波长分段调整;Yarn插值结合温度调节;以及LongRoPE采用非均匀插值策略。这些技术在不修改模型结构的前提下,通过调整位置编码的

qq_43044037的博客 1634

CMOS中的 latch-up 闩锁效应、添加tap解决latch-up、使用combained area绘制TAP TAP的作用 IC后端版图【VLSI】

本文详细阐述了闩锁效应latch-up问题、如何通过添加Tap来解决。详细讲述了如何通过combained area来绘制TAP

Jie_MSD的博客 1万+

汉诺塔问题C语言非递归算法

汉诺塔(Hanoi)问题是学习递归算法时一个很经典的例子,通过递归算法解决,在C站上很多很多,今日就跟着鸡翅一起学习一下非递归算法吧!这次使用的是栈堆的数据结构。//先定义栈元素 int n;//n表示当前是第几个圆盘 char a , b , c;// a,b,c代表三个柱子,a为当前圆盘所在柱子, b为可以借助的柱子, c为目标柱子,即要放到的那个位置的柱子 bool flag;//代表此时圆盘可以移动不 } elem;int top;// top标记栈顶元素 elem e [ 64 ];

一个学习网安的鸡翅 3790

RK3568/RK3588 + YT 9215交换机芯片,MAC TO MAC 调试记录

原来的方案是rk3568 gmac 直接接phy,phy 接 switch 芯片,只是把交换芯片当交换用,驱动方面基本不用开发,但是要做vlan 那么必须涉及交换芯片的开发。选择裕太微有两个方面的原因:1.国产化替代2.可获得原厂技术支持3.目前已经完成 两个gmac 口交换芯片的配置,实现vlan,内部交换,两个光口可正常通信。

Nyiragongo的博客 1万+

C语言汉诺塔问题的递归算法

C语言汉诺塔问题的递归算法

langchou的博客 1万+

结构力学仿真软件:STAAD.Pro:结构抗震设计与STAAD.Pro应用_2024-08-10_11-49-29.Tex

STAAD.Pro是一款广泛应用于结构工程领域的仿真软件,由Bentley Systems开发。它能够进行结构分析和设计,支持多种结构类型,包括桥梁、建筑物、塔架等。STAAD.Pro提供了强大的建模工具,用户可以轻松创建复杂的结构模型,并进行静态和动态分析。软件还支持多种载荷组合,包括地震载荷,以及提供详细的报告和图纸输出,便于工程师进行设计和审查。STAAD.Pro是一款广泛应用于结构工程设计的软件,其界面直观,功能强大,能够进行结构分析与设计。菜单栏。

965

激光焦点动态跟踪技术实战大揭秘:电容式与同轴视觉的巅峰对决

激光焦点动态跟踪技术是保证激光加工质量的关键因素。本文对比评测了电容式和同轴视觉两种主流技术:电容式响应速度快、成本低,适合高速稳定加工环境,但易受电磁干扰;同轴视觉精度高、抗干扰强,适合精密加工和复杂工件,但成本较高且处理速度受限。评测结果表明,企业应根据加工需求、预算和环境选择合适技术。未来该技术将向智能化、多技术融合方向发展,为工业应用提供更优解决方案。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 119

c语言汉诺塔递归算法

c语言汉诺塔递归算法详细解释,图文并茂

Z_W_H_的博客 9430

Prompt Engineering 学习指南:从入门到精通的最佳路径与资源

随着大型语言模型(LLM)能力的飞速发展,Prompt Engineering(提示工程)已成为人与AI协作的核心技能。本报告旨在为不同水平的学习者提供一条清晰、高效的学习路径,整合了当前社区公认的最佳实践和顶级开源资源,帮助您系统地掌握 Prompt Engineering,释放 LLM 的全部潜力。保持好奇心,不断尝试,您将能驾驭语言模型这一强大的工具,创造出前所未有的价值。超越简单的“一问一答”,学习如何将 Prompt Engineering 与外部工具和数据结合,构建强大的 AI 应用。

shiter编写程序的艺术 692

C语言递归算法——汉诺塔问题(河内塔)

汉诺塔问题是学习和熟练使用函数递推的经典c语言问题,其中过渡递推的使用对c语言初学者日后的启发,能帮助大家对C语言算法更加熟练。

lanman716的博客 1761

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C语言汉诺塔递归算法实现

用汉诺塔例子理解递归思想,用C语言来实现递归解决汉诺塔问题

柠檬i的博客 2722

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C语言数据结构-汉诺塔递归算法

汉诺塔问题是一个经典的递归算法应用。其解法分为三步:1)将n-1个盘子从起点柱借助目标柱移到辅助柱;2)移动最大的盘子到目标柱;3)将n-1个盘子从辅助柱移回目标柱。递归终止条件是只剩1个盘子时直接移动。该算法最少需要2^n-1步完成移动。代码实现了递归求解过程,并计算总步数,展示了递归分解问题的思想。

June_Swift的博客 1091

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

基于C语言用递归算法实现汉诺塔解法的计算

基于C语言用递归算法实现汉诺塔解法的计算 如有不懂欢迎提问 #include<stdio.h> int steps = 0; //三根柱A(用0表示),B(用1表示),C(用2表示),起始A,目标C void print(int num, int get, int put) { steps++; printf("move disk%3d from %c to %c\n", n...

boyinthesun的博客 412

分治与递归算法——关于汉诺塔问题(C语言实现)

大一上学期第一次接触到“汉诺塔”问题,当时由于C语言程序设计课没有好好听(毕竟当时天真地觉得自己以后应该不会从事与程序密切相关的工作,所以经常翘课doge),对于这一类需要利用递归等算法思维进行求解的问题自然也理解的不是很到位。暑假开始学习数据结构与算法,在分治与递归这一块卡了很久,想在这一篇博客里记录一下自己关于分治与递归的一些想法。 一、分治与递归: 先简单复述一下分治的概念: 关于分治的时间复杂度: 由于递归本质上是实现分治中分解与归并的手段,因而在...

NanamiKento的博客 1606

c语言 递归算法解决汉诺塔问题

用递归解决汉诺塔问题

美酒爱尔兰的博客 6659

解密汉诺塔算法:用C语言实现递归与栈的巧妙结合

开始时,这些杆子上穿有若干个盘子,盘子大小各不相同,且按照从小到大的顺序从上到下叠放。现在的任务是,把所有盘子从杆子X移到杆子Z上,要求每次移动只能移动一个盘子,并且大盘子不能放在小盘子上面。本文通过C语言代码实现了汉诺塔问题的解法,并且使用了栈数据结构进行辅助,以展示递归与栈的结合应用。读者将会了解到如何使用递归思想解决复杂问题,并且学会了如何在实际编程中利用栈这一数据结构进行辅助计算。解决这个问题的经典算法是递归算法。在递归算法中,我们将大问题分解成小问题,并且通过不断调用自身来解决这些小问题。

2402_83326934的博客 683

汉诺塔算法——C语言递归实现

汉诺塔的递归实现算法,将A中的圆盘借助B圆盘完全移动到C圆盘上, 每次只能移动一个圆盘,并且每次移动时大盘不能放在小盘上面 递归函数的伪算法为如下: if(n == 1)    直接将A柱子上的圆盘从A移动到C else    先将A柱子上的n-1个圆盘借助C柱子移动到B柱子上    直接将A柱子上的第n个圆盘移动到C柱子上    最后将B柱子上的n-1个圆盘借助A柱子移动到C柱子

JIANGXIN04211的专栏 1330
上一篇: 求最大公约数(C语言)
下一篇: 报数游戏(C语言)
小全.
博客等级 码龄4年 352粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小全.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值