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

算法之路(四)----汉诺(又称河内

汉诺是很简单也很经典算法之一。 汉诺是根据一个传说形成数学问题: 有三根杆子A,B,C 。A杆上有N个(N>1)穿孔圆盘,盘尺寸由下到上依次变小。...要求按下列规则将所有圆盘移至C杆: 1 每次只能移动一个圆盘; 2 大盘不能叠在小盘上面。 提示:可将圆盘临时置于B杆,也可以将A杆移除圆盘重新移动回A杆,但都必须遵循上述两条规则。 问:如何移?...寺院地点众说纷纭,其中一说是位于越南河内,所以被命名为“河内”。另外亦有“金盘是创世时所造”、“僧侣们每天移动一盘”之类背景设定。...佛教中确实有“浮屠”()这种建筑;有些浮屠亦遵守上述规则而建。“河内”一名可能是由中南半岛在殖民时期传入欧洲。 解答 如取N=64,最少需移动264− 1次。...解法 解法基本思想是递归。假设有A、B、C 三个,A有N块盘,目标是把这些盘全部移动到C。那么先把塔顶部N-1块盘移动到B,再把A剩下大盘移动到C,最后把BN-1块盘移动到C。

1.4K20

python练习题-day17

求满足规律100以内所有数据 3、计算xn次方,如:34次方 为3*3*3*3=81 4、汉诺:汉诺(又称河内)问题是源于印度一个古老传说益智玩具。...并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘 ? 当只有一个盘子时候,只需要从将A塔上一个盘子移到C塔上。...当A塔上有3个盘子时,先将A塔上编号1至2盘子(共2个)移动到B塔上(需借助C),然后将A塔上3号最大盘子移动到C,最后将B塔上两个盘子借助A移动到C塔上。...当A塔上有n个盘子是,先将A塔上编号1至n-1盘子(共n-1个)移动到B塔上(借助C),然后将A塔上最大n号盘子移动到C塔上,最后将B塔上n-1个盘子借助A移动到C塔上。...f(x-1)*x #2 #3 def f(x,n): if n==0: return 1 else: return f(x,n-1)*x #4 #5 #循环

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

【c语言】汉诺问题详解(c语言递归函数)

问题介绍及背景 汉诺,又称河内。是一个源于印度古老传说益智玩具。...并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 接下来我们就分析一下汉诺问题具体思路!...图解汉诺移动 n=3 这里可以理解为我们先将前n-1个圆盘借助C柱移到B柱,然后把最大圆盘移到C柱,然后再以同样思路执行。...即把非空柱子上圆盘移动到空柱子上,当两根柱子都非空时,移动较小圆盘,移一次。这一步虽没有明确规定移动哪个圆盘,但执行行动却是唯一。 3.反复1和2操作,最后就完成了汉诺移动。...事实上汉诺移动有一个循环:n为偶数时,他总是以A->B,A->C,B->C,A->B,C->A,C->B循环;n为奇数时,他总是以A->C,A->B,C->B,A->C,B->A,B->C循环

24810

关于面试总结5-python笔试题(递归)

if n == 1: return 1 else: return n*digui(n-1) a = 10 print(digui(a)) 方法3:用for循环...x*mi(x, n-1) x = 3 num = 4 print(mi(x, num)) 汉诺问题 汉诺:汉诺(又称河内)问题是源于印度一个古老传说益智玩具。...并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘 ? 当只有一个盘子时候,只需要从将A塔上一个盘子移到C塔上。...当A塔上有3个盘子时,先将A塔上编号1至2盘子(共2个)移动到B塔上(需借助C),然后将A塔上3号最大盘子移动到C,最后将B塔上两个盘子借助A移动到C塔上。...当A塔上有n个盘子是,先将A塔上编号1至n-1盘子(共n-1个)移动到B塔上(借助C),然后将A塔上最大n号盘子移动到C塔上,最后将B塔上n-1个盘子借助A移动到C塔上。

83630

Python 递归解决汉诺问题

汉诺(Tower of Hanoi),又称河内,是一个源于印度古老传说益智玩具。大梵天创造世界时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。...并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 问题分析 先来看一下汉诺玩法。下图为3层汉诺。...第一步 x–>z: 第二步 x–>y: 第三步 z–>y: 第四步 x–>z: 第五步 y–>x: 第六步 y–>z: 第七步 x–>z: 通过分析以上步骤,可以大致分解为以下三个步骤...: 将 x 轴上 n-1 个盘子移动到 y 轴上。...将 x 轴上最底下盘子移动到 z 轴上。 将 y 轴上 n-1 个盘子移动到 z 轴上。

22530

分治算法

分治算法可以求解一些经典问题: 二分搜索 大整数乘法 棋盘覆盖 合并排序 快速排序 线性时间选择 最接近点对问题 循环赛日程表 汉诺 分治算法基本步骤 分治法在每一层递归上都有三个步骤: (1)分解...分治算法最佳实践----汉诺 汉诺传说 汉诺又称河内问题时源于硬度一个古老传说益智玩具。...并且规定,再小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 假如每秒钟一次,共需多长时间呢?移玩这些金属片需要5845.54亿年以上,太阳系语气寿命据说也就是数百亿年。...真的过了5845.54亿年,地球上一切生命早已灰飞烟灭。 汉诺游戏思路分析: (1)如果是有一个盘,A->C。...如果我们有n>=2情况,我们总是可以看做是两个盘1.最下面的盘 2.最上面的盘 (2)先把最上面的盘A->B (3)把最下边盘A->C (4)把B所有盘从B->C 2.详细内容 namespace

38110

python求解汉诺游戏

本文实例为大家分享了python求解汉诺游戏具体代码,供大家参考,具体内容如下 一、问题定义 百度百科定义:汉诺(又称河内)问题是源于印度一个古老传说益智玩具。...并且规定,在小黄金圆盘上不能放大黄金圆盘,在三根柱子之间一次只能移动一个圆盘。 例如,如果黄金圆盘只有3片,则为了满足游戏规则,那么必须按照如下图所示8个步骤完成: ?...柱上 count += hanoi(n - 1, y, x, z) # 递归调用 return count def main(): hanoi_level = input("请输入汉诺层数...: 请输入汉诺层数:4 X -- Y X -- Z Y -- Z X -- Y Z -- X Z -- Y X -- Y X -- Z Y -- Z Y -- X Z -- X...Y -- Z X -- Y X -- Z Y -- Z 总共移动次数为15 以上就是本文全部内容,希望对大家学习有所帮助。

80320

用例子理解递归

如果你去百度循环和递归优缺点,可能有这样答案: 递归算法: 优点:代码简洁、清晰,并且容易验证正确性。...但是,对于某些问题,如果不使用递归,那将是极端难看代码。 循环算法: 优点:速度快,结构简单。 缺点:并不能解决所有的问题。有的问题适合使用递归而不是循环。...所以我觉得不能单一循环和递归做比较,就拿顺序结构,分支结构,循环结构,模块化结构,这四大结构来说,循环一直是作为一个基础内容,而递归是为了解决特定问题而出现算法,本质上也属于循环一种,对于上述问题...int fun(int n) { if(n<=2) { return n; } return fun(n-1)+fun(n-2); } ---- 3.汉诺       比较有名就是汉诺...(又称河内)问题,汉诺源于印度一个古老传说益智玩具。

1K10

汉诺问题求解

汉诺:汉诺(又称河内)问题是源于印度一个古老传说益智玩具。大梵天创造世界时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。...并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。  核心思想-----递归: 汉诺问题通过简单递归进行求解,代码比较简洁,通俗易懂。...其实汉诺问题移动次数是有规律可寻的,通过递归代码找出相应规律,并通过数学方法得到结果效率才是最高。...当n=1时,a柱子只有一个圆盘,直接移至c柱 当n>1时,根据规则1和2,将a柱子n-1个圆盘移动到b柱子,然后将a剩下一个圆盘移动到c,接着再把b上暂时放着n-1个圆盘移动到c 递归求解其实就是不断降低问题规模过程...,将b柱子n-1个圆盘移至c何尝不重复上述两点过程。

58520

汉诺问题思路和c语言解决方法

何为汉诺问题? 汉诺问题是一个经典问题。汉诺(Hanoi Tower),又称河内,源于印度一个古老传说。...并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作移动圆盘次数最少?...; 经过以上模拟,那我们就有了解决汉诺问题大概思路;假如我们有三个圆盘,那我们用以上思路: 将第一个柱子最上面两个圆盘移到中间柱子上(方法类似与两个圆盘,将两个圆盘移到最后一个柱子上,...总共七步就可以完成三个圆盘汉诺问题。...依次类推: 四个圆盘汉诺问题只需两次三个圆盘转移和一次一个圆盘转移即7+7+1一共15步就可以解决该问题; 故n个圆盘汉诺问题就只需2……n-1(2n次方减1); C语言实现方法: 在这里我用

11400

Python算法 汉诺

本文链接:https://blog.csdn.net/weixin_42449444/article/details/84997039 算法描述: 汉诺(Hanoi Tower),又称河内,源于印度一个古老传说...大梵天创造世界时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着N片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。...并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?...算法分析: 将 N 个圆盘从左边柱子移动到右边柱子: [递归]将 N-1 个圆盘从左边柱子移动到中间柱子。 将最大圆盘从左边柱子移动到右边柱子。...[递归]将 N-1 个圆盘从中间柱子移动到右边柱子 算法实现: def hanoit(height, left='left', middle='middle', right='right'):

54610

汉诺问题

汉诺问题 一、介绍 汉诺(Tower of Hanoi),又称河内,是一个源于印度古老传说益智玩具。...并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。介绍来源于百度知道。 我小时候也玩过,但当时就是云里雾里,不知道怎么去解题,简单可以完成,难就不行了。...到了现在,如何用代码解题,依旧是一个不小难度,反正我是得琢磨一会。 二、解题思路 有三根柱子,分别是起始柱子,辅助柱子,目标的柱子,我们需要将圆盘从开始移动到目标。...但由于汉诺这项规则,在小圆盘上不能放大圆盘上,我们就可以将其分为两部分,分为上面一部分,下面一部分。 下面一部分永远比上面一部分要大,所以需要先将上面这一部分移动到辅助位置。...public static void main(String[] args) { hanoi(3, 'A', 'B', 'C'); } /** * 移动汉诺

29720

php递归算法经典实例_汉诺问题递归算法c语言

大家好,又见面了,我是你们朋友全栈君。 利用PHP实现 汉诺 汉诺(又称河内)问题是源于印度一个古老传说益智玩具。...大梵天创造世界时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。...并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。...简而言之,有三根相邻柱子,标号为A,B,C,A柱子上从下到上按金字状叠放着n个不同大小圆盘,要把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,请问至少需要多少次移动...php // 汉诺算法 // 实现逻辑 --> 递归 (关系可以由 n=2 比较容易想出) // 把 第 n-1 个由 A 移动到C // 把 第 n 个 由 A 移动到 B // 把 第 n-1 个由

38210

3145 汉诺游戏

3145 汉诺游戏  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 白银 Silver  查看运行结果 题目描述 Description 汉诺问题(又称为河内问题),是一个大家熟知问题...在A,B,C三根柱子上,有n个不同大小圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你目标是在最少合法移动步数内将所有盘子从A移动到C。...游戏中每一步规则如下: 1. 每一步只允许移动一个盘子(从一根柱子最上方到另一个柱子最上方) 2....移动过程中,你必须保证大盘子不能在小盘子上方(小可以放在大上面,最大盘子下面不能有任何其他大小盘子) 如对于n=3情况,一个合法移动序列式: 1 from A to C 2 from A...Description 一个整数n 输出描述 Output Description 第一行一个整数k,代表是最少移动步数。

96870

Hanio汉诺代码递归实现

1.背景介绍 Hanio (汉诺,又称河内)问题是源于印度一个古老传说益智玩具。大梵天创造世界时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。...并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 我们姑且不去追溯传说缘由,现考虑一下把64片金片,由一根针上移到另一根针上,并且始终保持上小下大顺序。这需要多少次移动呢?...真的过了5845.54亿年,不说太阳系和银河系,至少地球上一切生命,连同梵、庙宇等,都早已经灰飞烟灭。...",n,a,c); 10 hanio(n-1,b,a,c); 11 } 12 } 13 int main(){ 14 int n; 15 printf("本汉诺游戏为从...这次就以介绍汉诺实现作为引子,后续还会继续更新更多递归算法。敬请关注!

22820

《具体数学》学习笔记

第1章 递归问题 1.1河内 $n$个盘子汉诺问题需要移动$2^n - 1$次 1.2平面上直线 $n$条直线最多能将平面划分为$\frac{n(n+1)}{2}$个区域 1.3约瑟夫问题 约瑟夫问题...)2$ $J((b_mb_{m - 1}\dots b_1b_0)_2) = (b_{m - 1}\dots b_1b_0bm)2$ 即$J(n) = n_2 \  left \  rotate$(左循环一位...这个和式给出了接近$N$随机整数平均而言有多少个素因子,因为那些整数中大约有$1/p$个能被$p$整除,对于大$N$,它值近似等于$lnlnN + M$,其中 $$M \approx 0.261...,$H_n$称为一个“调和数”(harmonic number) 2.3 和式处理 设$K$是任意一个有限整数集合,$K$中元素和式可以用三条简单法则加以变换: $$\sum_{k \in K}ca_k..._{k = 1}^m p_k$$ 4.3 素数例子 素数有无穷多个 形如$2^p - 1$数,称为梅森素数(Mersenne number) 4.4 阶乘因子 斯特林公式 $$n!

69650

【Java SE】方法使用

,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开 方法体:方法内部要执行语句 在java当中,方法必须写在类当中 在java当中,方法不能嵌套定义 在java当中,没有方法声明一说...对于基础类型来说, 形参相当于实参拷贝. 即 传值调用 1.5没有返回值方法 方法返回值是可选....例1:求1234各项之和 例2:打印1234 各项 例3:求斐波那契数列第n项 方法一:迭代实现 方法2:递归实现 但是循环效率远大于递归!...递归经典:汉诺 汉诺(Tower of Hanoi),又称河内,是一个源于印度古老传说益智玩具。大梵天创造世界时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。...并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。【百度百科】 … 由以上可得每移动n个需要(2^n)-1步骤。 我们可以发现,要想移动所有的盘子,可以逆着思路推理。

29620

第十四届蓝桥杯集训——练习解题阶段(无序阶段)-分治算法

最简单分治算法——二分法         利用分治策略求解时,所需时间取决于分解后子问题个数、子问题规模大小等因素,而二分法,由于其划分简单和均匀特点,是经常采用一种有效方法,例如二分法检索...解题步骤 (1)分解,将要解决问题划分成若干规模较小同类问题; (2)求解,当子问题划分得足够小时,用较简单方法解决; (3)合并,按原问题要求,将子问题解逐层合并构成原问题解。...分治算法例题: 汉诺         汉诺(又称河内)问题是源于印度一个古老传说益智玩具。大梵天创造世界时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。...并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。...class Demo5 { public static void main(String[] args) { hanoiTower(6, "A", "B", "C"); } /** * 汉诺问题

24730

读完这篇文章轻松理解递归算法

具体地说,如果递归函数调用自己,则被调用函数也将调用自己,这将无限循环下去,除非代码中包含终止调用链内容。通常方法将递归调用放在if语句中。...递归使用 递归强大之处在于它允许用户用有限语句描述无限对象。因此,在计算机科学中,递归可以被用来描述无限步运算,尽管描述运算程序是有限。这一点是循环不太容易做到。...编写正确递归算法,一定要有 ”归“ 步骤,也就是说递归算法,在分解问题到不能再分解步骤时,要让递归有退出条件,否则就会陷入死循环,最终导致内存不足引发栈溢出异常。...汉诺传说: 汉诺(又称河内)问题是源于印度一个古老传说益智玩具。...具体问题: 有三根相邻柱子,标号为A, B, C,A柱子上从下到上按金字状叠放着n个不同大小圆盘,要把所有盘子一个一个移动到柱子C上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,请问要如何移动

49320

【汉诺】经典递归问题(Java实现)图文并茂讲解

什么是汉诺 汉诺(Tower of Hanoi),又称河内,是一个源于印度古老传说益智玩具。大梵天创造世界时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。...并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 2. 问题分析 首先我们假设三根柱子为A(起始柱子),B(中转柱子),C(结束柱子);有N个圆盘。...综上我们可以将问题分解为以下三个步骤: 将A柱上n-1个盘子移动到B柱上 将A柱上剩下一个盘子移动到C柱上。 将B柱上n-1个盘子移动到C柱上。...递归分解:将问题分解为三个步骤,每次递归调用都是为了完成这三个步骤中一个。 递归回溯:在完成一个递归调用后,需要将问题状态恢复到递归调用前状态,以便进行下一个递归调用。...递归效率:汉诺问题递归解法时间复杂度为O(2^n),其中n表示盘子数量。因此,当盘子数量较大时,递归解法时间复杂度会非常高。

23510
领券