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

深层剖析汉诺塔的使用(递归)

1.背景介绍 汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。...并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。...2.汉诺塔实现 我将以画图形式详解汉诺塔的原理及实现步骤: 假设第一根柱子为A,第二根柱子为B,第三根柱子为C 2.1一个盘子 A --> C :需要一步 2.2两个盘子 A --> B A -->...此时B中的圆盘又需要用同样的方法将n-2个圆盘挪到A柱中,并将其第n-1个圆盘挪到C中,如此n-2个圆盘全在A柱子中了。可以发现,这个过程是不断循环下去的,直到最后一个盘子落到C盘上结束。...假设人们一秒能够挪动一个盘子且挪动是正确的,最少也要5749亿年多才能完成。 如果交给计算机计算呢?

8210

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

汉诺塔是很简单也很经典的算法之一。 汉诺塔是根据一个传说形成的数学问题: 有三根杆子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,最后把B塔的N-1块盘移动到C。

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

    python练习题-day17

    求满足规律的100以内的所有数据 3、计算x的n次方,如:3的4次方 为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 #循环

    43310

    【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循环。

    40510

    关于面试总结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塔上。

    86730

    对汉诺塔递归算法的简单理解

    一.历史背景:汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。...并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。...二.递归算法:这里n,表示总共有几个盘子 ,a表示当前的塔,b表示中转塔,c表示目标塔,(注意:他们递归时,中转塔会,当前的塔,目标塔会改变)这里用一个静态变量sum,来记住盘子移动的次数。...2.有很多盘子时(n个),移动盘子的递归思想可以大概直接抽象为: 把(n-1)个盘子看作一个整体,借助C塔 从A-->B(具体移动过程中靠函数递归来实现)再把最底部那个盘子,借助B塔从 A-->C。...void hanoi(int n, String a, String b, String c) { /** n表示总共有几个盘子 * a表示当前的塔,b表示中转塔,

    24410

    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 轴上。

    26130

    汉诺塔与青蛙跳台阶

    1.汉诺塔 根据汉诺塔 - 维基百科 介绍 1.1 背景 最早发明这个问题的人是法国数学家爱德华·卢卡斯。 传说越南河内某间寺院有三根银棒,上串 64 个金盘。...寺院里的僧侣依照一个古老的预言,以上述规则移动这些盘子;预言说当这些盘子移动完毕,世界就会灭亡。这个传说叫做梵天寺之塔问题(Tower of Brahma puzzle)。...寺院的地点众说纷纭,其中一说是位于越南的河内,所以被命名为“河内塔”。另外亦有“金盘是创世时所造”、“僧侣们每天移动一盘”之类的背景设定。 1.2 规则与问题 有三根杆子A,B,C。...A杆上有 N 个 (N>1) 穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至 C 杆: 1.每次只能移动一个圆盘; 2.大盘不能叠在小盘上面。...斐波那契数列的公式是f(n) = f(n-1)+f(n-2)(n>2) 这里的公式也是如此,不过不同的是数列的第一个值和第二个值不相同。

    8010

    分治算法

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

    40310

    用例子理解递归

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

    1.1K10

    汉诺塔问题求解

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

    61320

    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'):

    56810

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

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

    15000

    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,代表是最少的移动步数。

    99770

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

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

    40810

    汉诺塔问题

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

    32520

    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("本汉诺塔游戏为从...这次就以介绍汉诺塔的实现作为引子,后续还会继续更新更多递归算法。敬请关注!

    26020

    《具体数学》学习笔记

    第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!

    72850

    【Java SE】方法的使用

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

    31520
    领券