首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

7-8 递归实现

点这里 7-8 递归实现 借助堆栈以非递归(循环)方式求解问题(n, a, b, c),即将N个盘子从起始柱(标记为“a”)通过借助柱(标记为“b”)移动到目标柱(标记为“c”),并保证每个移动符合问题要求...输入样例: 3 输出样例: a -> c a -> b c -> b a -> c b -> a b -> c a -> c 没有错,我用递归写✍而且过了。。。。...(虽然这道题说了非递归实现) ,咱还真不会(C语言?老师讲过?,咱都还回去了) 感觉从B站学了一下?才懂了点:算法粗劣讲解以及编程实现 就是每一?‍...1-2 递归实现 (25 分)点击传送~~~ 至于非递归?...给个链接⑧; 非递归思想来实现问题求解

96410

基于非递归算法游戏之Python实现

本文代码涉及到问题递归算法,可能不是很好理解,我在代码中加了大量注释,希望能够有所帮助,如果实在难以理解的话,请搜索这个算法并结合下面的代码进行阅读和理解。...感谢国防科技大学刘万伟老师提供算法思路和第一版本代码。...,n-1 #第i步应该移动盘子编号 #正好是i二进制形式中最后连续0个数 b_i = bin(i) j = len(b_i) -...:移动盘子'+str(j+1), chr(65+L[j]),'->', end=' ') #把ABC三根柱子摆成三角形 #把第j个盘子移动到下一根柱子上 #根据j奇偶性决定是顺时针移动还是逆时针移动...L[j] = ((L[j]+1)%3 if j%2 == 0 else (L[j]+2)%3) #下一根柱子,这里65是AASCII码 print(chr(65+L[j])) hannoi

1.7K50
您找到你想要的搜索结果了吗?
是的
没有找到

【未完成】1-2 递归实现 (25 分)

本文链接:https://blog.csdn.net/shiliang97/article/details/100150223 1-2 递归实现 (25 分) 借助堆栈以非递归(循环)方式求解问题...(n, a, b, c),即将N个盘子从起始柱(标记为“a”)通过借助柱(标记为“b”)移动到目标柱(标记为“c”),并保证每个移动符合问题要求。...递归算法描述如下: 首先容易证明,当盘子个数为n时,移动次数应等于2^n - 1。 一位美国学者发现一种出人意料方法,只要轮流进行两步操作就可以了。...(3)反复进行(1)(2)操作,最后就能按规定完成移动。...从这里看到了解法:5-17 递归实现 (25分) 博主感悟感觉很有意思 感想: 1.能用人脑能完成部分尽量不要让计算机去完成,这样可以节省不少时间 2.printf快于cout

91720

递归算法典型程序,分形树绘制和问题解决。

在程序中,程序自身调用自身这种技巧称为递归。...我们总是认为递归就是不断调用自己,但事实上我们忽略了一个重要条件,程序中递归应该有终止条件,如果没有终止条件,其实就不算程序,更别说程序中递归了。 那么,什么样程序叫递归呢?...draw_tree(length) turtle.done() if __name__ == '__main__' : main() 运行结果如下,这里我填充了背景为黑色 :2:...:(又称河内)问题是源于印度一个古老传说益智玩具。...我们来看具体程序: “”" designer : 蒋光道 version : 1.0 function : 解决问题 date : 2020 / 07 / 27 “”" print

32720

问题

问题 学递归,跳不过这个程序。以前弄NOIP,老师很详细地讲过原理以及实现算法,不过我上大学了却发现老师讲到,只是像一笔带过,原理都没讲通,更别说算法了。...我相信像他那么讲,没一个同学(没基础)能弄得懂,就算你给一个flash游戏,也不见得会玩。 真的挺有意思,我写这篇文章,也算是回忆回忆以前学过知识。如果有什么错误,还请原谅。...没有听说过的人,可以去baidu查查,或则你去http://www.4399.com/flash/293.htm 玩一玩,大概就知道是干什么了。...移动步数和n是成指数增加,当n=64时,需要移动264-1次,这是个天文数字。n通常不要大于16就行了。 如果你以前没有任何递归基础,也许你看不懂这些代码。...最后给大家和我自己留一个问题:是三根柱子,如果我们有四根柱子,我们又怎样移动盘子,或者说怎样移动使步数最少?有时间我会想想这个问题,以后写一个“拓展”。

1.2K21

【愚公系列】2023年12月 五大常用算法(一)-分治算法

☀️1.2.1 操作数量优化 分治算法是一种将问题划分为多个子问题,并将子问题递归地解决,最终将子问题解合并成原问题解算法。在操作数量优化方面,分治算法可以提高算法效率。...问题:将 n 个盘子从原始柱子移动到目标柱子,需要将 n-1 个盘子从原始柱子移动到辅助柱子,然后将最后一个盘子从原始柱子移动到目标柱子,最后将 n-1 个盘子从辅助柱子移动到目标柱子,递归执行这个过程即可...:"); PrintUtil.PrintTree(root); } } 4.问题 问题可以通过分治算法来解决。...分治算法是将问题分解成若干个小子问题来解决,最后将子问题结果合并起来得到最终解决方案。 在问题中,我们可以将分解为三个部分,分别为起始、中转和目标。...下面是使用分治算法来解决问题代码: public class hanota { /* 移动一个圆盘 */ public void move(List src, List

27722

多柱最优算法设计探究

三柱 三柱是经典问题,在算法设计中是递归算法典型问题。...从4柱递归方程和结果公示中我们可以看出,随着柱子数量增加,算法复杂程度也是不断地增加。...对于解决M柱问题需要使用M-1柱算法,因此除了算法解决问题需要递归外,算法流程本身也需要递归,这种递归结构已经远远地复杂于当前所接触递归算法。...总结 通过以上讨论,我们从一般思维——不折叠盘子,出发去找多柱最优解,但是结果并没有成功——盘子多时有可能柱子没有充分利用。...后来通过前人提出Frame算法引申出多柱算法,并大致描述了多柱算法双重嵌套递归结构——算法问题递归以及算法本身递归实现。

2.2K90

递归-问题

传说:问题,是源于印度一个古老益智玩具;大梵天创造世界时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。...函数) 问题解法是按照递归算法进行实现;(问题) 数据结构形式是按照递归定义;(二叉树,图问题,线性表:DFS搜索,归并排序,快速排序等) 问题递归分析: 假设一共有n个圆盘,则问题...; // n 个盘 从 A 移动到 C, 借助辅助B; hanoi(n, A, C, B); // 递归求解; return 0; } bash-3.2$ c++ 问题.../a.out 问题: 圆盘个数:1 移动次数:1 把块:1 按照如下移动:A --> C bash-3.2$ c++ 问题.cc; ..../xuyaowen; 参考链接:*文中图来自于参考链接,如侵权请私信我更换; 图解 如何理解递归

83220

CC++实现游戏和详细解

C/C++实现游戏和详细解析 引言 问题是一个经典递归问题,起源于一个传说中印度寺庙。...每次移动后,较大圆盘不能放在较小圆盘上面。 可以借助第三个柱子作为中转。 本文将通过C/C++代码详细解释如何实现游戏,并展示其递归解法。...递归解法 解决方案可以通过递归方法非常优雅地实现。递归基本思想是将问题分解成更小问题,直到问题足够小,可以直接解决。...递归步骤:将最大圆盘之上所有圆盘移动到辅助柱子,然后将最大圆盘移动到目标柱子,最后将这些圆盘从辅助柱子移动到目标柱子。...效果演示 结语 通过这篇文章,我们不仅学习了如何用C/C++编写递归解决方案,还深入了解了递归概念及其在实际问题中应用。

32500

如何理解分治思想

今天应用分治思想就是完全适用于归并排序,归并排序同时还要去理解递归思想。 如果对递归不理解,需要去学习下,要不没办法继续下去,分治思想最著名体现就是。...image.png 相信大家都玩过吧,那么是如何来呢? 传说越南河内某间寺院有三根银棒,上串 64 个金盘。...这就是由来。 算法求解 解法基本思想是递归。假设有 A、B、C 三个,A有N块盘,目标是把这些盘全部移到 C 。...对于只有一个盘子,可以表示为: image.png 对于有两个盘子, 可以表示为: 相互连接三个三角形, 组成了一个较大三角形三个角。...最大三角形可以沿着中线分成三个次小三角形, 就是上面由二级组成三级逆向操作, 次小三角形相互之间连线, 表示着最大盘子移动方式.

43370

问题(利用递归解决)内含斐波那契数列0.o

首先,我们来看看什么是吧~记得初知,就是在今年暑假游览科技馆时候,里面就有游戏,当然耐心烦躁我并没有解决,没想到今日学习c语言还能看见它(捂脸)。...介绍 传说印度教主神梵天在创造世界时候,在其中一根针上从下到上地穿好了由大到小64片金片,这就是所谓。...僧侣们预言,当所有的金片都从梵天穿好那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵、庙宇和众生也都将同归于尽。(以上为废话) 在C语言中,可以使用递归算法来实现问题。...问题是一个经典递归问题,规定了三根柱子(A、B、C),其中A柱上有n个圆盘,按照从大到小顺序堆叠。...", &n); // 调用递归函数解决问题 hanoi(n, 'A', 'B', 'C'); return 0; } // 递归函数实现 void hanoi(int

12210

2021-07-27:给定一个数组arr,长度为N,arr中值只有1

arri == 1,代表问题中,从上往下第i个圆盘目前在左;arri == 2,代表问题中,从上往下第i个圆盘目前在中;arri == 3,代表问题中,从上往下第i个圆盘目前在右。...那么arr整体就代表游戏过程中一个状况。如果这个状况不是最优解运动过程中状况,返回-1。如果这个状况是最优解运动过程中状况,返回它是第几个状况。...福大大 答案2021-07-27: 1-7问题。 1-6左→中。 7左→右。 1-6中→右。 单决策递归。 k层问题,是2k次方-1步。 时间复杂度:O(N)。...func main() { arr := []int{3, 3, 3} if true { ret := kth(arr) fmt.Println("递归...other // arr[0..index]这些状态,是index+1层问题,最优解第几步 func step(arr []int, index int, from int, to int, other

1.1K10

2021-07-27:给定一个数组arr,长度为N,arr中值只有1,2,3三种。arr == 1,代表问题中,从

arr[i] == 1,代表问题中,从上往下第i个圆盘目前在左;arr[i] == 2,代表问题中,从上往下第i个圆盘目前在中;arr[i] == 3,代表问题中,从上往下第i个圆盘目前在右...那么arr整体就代表游戏过程中一个状况。如果这个状况不是最优解运动过程中状况,返回-1。如果这个状况是最优解运动过程中状况,返回它是第几个状况。...福大大 答案2021-07-27: 1-7问题。 1. 1-6左→中。 2. 7左→右。 3. 1-6中→右。 单决策递归。 k层问题,是[2k次方-1]步。 时间复杂度:O(N)。...func main() { arr := []int{3, 3, 3} if true { ret := kth(arr) fmt.Println("递归...other // arr[0..index]这些状态,是index+1层问题,最优解第几步 func step(arr []int, index int, from int, to int, other

89730

前端学数据结构 - 栈(Stack)和 队列(Queue)

用栈实现:由于规则与栈规则类似(先入后出),因此提出了用栈具体实现 Complexity for towers of Hanoi?...:复杂度是 O(2^n) 整个算法思路是: 将 a 柱子上 n-1 个盘子暂时移到 b 柱子上 a 柱子只剩下最大盘子,把它移到目标柱子 c 上 最后再将 b 柱子上 n-1 个盘子移到目标柱子...c 上 递归法优雅而精妙,伪代码如下: //将n个盘子按规则从a柱子,移动到c柱子 hanoi( n, a, b, c ) { if( n > 0 ) { hanoi...,还附有面试题 栈与队列应用举例:用栈和队列模拟停车场管理 JavaScript数据结构与算法——栈及其应用:罗列了括号匹配等具体应用,有图文解释 用栈解决迷宫问题(输出所有路径和最短路径) 数据结构与算法...JavaScript实现及应用 – 栈 递归 :介绍栈基本操作和它一些应用;在括号匹配检测,表达式求值,函数调用上应用,本文还将给出表达式求值和HTML5演示 Stack Data

97410

问题(函数递归

问题(Hanoi Problem)是经典问题解决算法,它涉及到数学、计算机科学和物理学等多个领域。...问题描述如下: 有一个包含n个大小不同圆盘这些圆盘从大到小依次排列在一条直线上。现在要求将这个按照大小顺序重新排列到另一条直线上,每次只能将较大圆盘放在较小圆盘之上。...通过调用这个函数,我们可以计算出完成问题所需最少操作次数。需要注意是,这个递归方法时间复杂度为O(2^n),空间复杂度也为O(n)。在实际应用中,当n较大时,该方法可能会导致栈溢出。...希望这篇文章能帮助你更好地理解问题及其解决方案。...补充:问题挺经典,以前我也一知半解,后来随着更深层次学习,对递归理解也要比之前更深,慢慢就有了自己理解,理解重点就是在于递归参数变换,其实就是原始杆和目标杆寻找,原始杆就是带有盘子杆子

13010

Python-原理分析

最近在“廖雪峰官方网站”学习Python,遇到递归问题百思不得其解,先是百度了原理,然后查看了别人文章,通过整理汇总,希望能够帮助其他人理解。...原理:(来源于百度百科) (又称河内)问题是源于印度一个古老传说益智玩具。...下面贴上代码 # 思想笔记 # 认识目标:把A柱子上N个盘子移动到C柱子 # 递归思想就是把这个目标分解成三个子目标 # 子目标1:将前n-1个盘子从...a移动到b上 # 子目标2:将最底下最后一个盘子从a移动到c上 # 子目标3:将b上n-1个盘子移动到c上 # 然后每个子目标又是一次独立游戏,也就可以继续分解目标直到...a移动到c, //整个代码执行完毕,移动完成 好吧,我承认我不会用这个博客,好多格式都没有表现出来。 ​ ​

50120

【Python数据结构与算法】--- 递归算法应用-五行代码速解问题.

两层演示 三层走法演示 我不知道有没有朋友跟我一样有一个疑问,如果我们顶端先放到中间柱子呢?...但是实际上问题解决方案都是最优解,我们不走弯路,我们目的性非常强,我们最终目的都是移动到c,所以我们可以先让顶端木块直接到c 解题思路: 不妨将这个问题拆解,n个,我们可以把最底下最大那个看成单独一个...,上面的(n - 1)个,看成一个整体.这样子最底下那个可以直接从 A 移动到 C,剩下上面的 ( n - 1 ) 个我们可以先从A 通过 C 移动到 B ....这样子不断进行递归,问题规模就可以逐层减小....需要注意是,这种递归实现虽然简单易懂,但是时间复杂度为指数级别的,所以不能用于大规模数据处理。

11710

Python3实现问题

n-1个盘子借助x移动到,z上,大功告成 递归出口:n=1时,直接从x移动到z上 二、Python3代码实现 # Python3递归实现游戏 def hannota(n,x,y,z): #...在里面,对于实参和形参理解很重要,要注意其区别。整个函数打印过程,可以自己动手一步一步去画一下,每一步怎么传参,打印是什么,来帮助理解。...游戏是递归调用,在函数调用过程中,栈问题需要注意,递归函数一层一层深入调用,但是每调用一层,函数不是马上返回,而是放在栈中,相应局部变量也是存在在里面,只有当调用到n=1时,函数才一个一个返回...中间有一个递归函数返回出问题,都会导致最后结果出错。 游戏移动次数问题其实是一个很经典等比数列问题。...四、参考资料 通过问题理解递归精髓 递归经典案例 python实现 形参和实参区别 程序实现—Python 及其具体运行步骤

68220

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券