snrg.net
当前位置:首页 >> 汉诺塔递归算法及详解 >>

汉诺塔递归算法及详解

图解是什么意思呀.这个算法 那么简单没必要搞得那么复杂吧.an = an-1 + 1; 你明白这个等式的意义吗?这个等式已经包含了递归算法的全部含义.an 表示 n个数的和,an-1 表示n-1个数的和 ,an = an-1 + 1;表示n个数的和可以通过n-1个

为了实现 n个盘从 借助c 从a 移动到 b思路如下: 首先考虑极限当只有一个盘的时候 只要 盘直接从 a -> b即可 那么当有2个盘的时候就只要先把1号盘从a -> c 然后 把2号盘 a->b 再 把 2好盘从 c - > b 那么当有n个盘的时候你只要先把 n-1个 盘 借

谭浩强对递归的那段叙述可为经典,找一个和尚,把63个盘子挪好,这个和尚又找一个和尚,挪62个盘子……最后,最轻松的那个和尚把1个盘子挪个地方,这就是递归以上.敬仰的老狼

首先要知道汉诺塔的基本思路.汉诺塔有3根柱子. 为什么要有3根呢? 那是因为要直接使一个柱子上的碟片全部移动到另一根柱子是不行的,必须要通过第三根柱子来中转一下.这种中转思路就是关键了.具体来说,如果我们要把A柱子上的碟片移

汉诺塔的规则是把N个盘子从A柱挪到C柱(假设是这样) 那末,我们要做的就是把N-1个盘子从A柱挪到B柱,再把1个盘子从A柱挪到C柱,再把N-1个盘子从B柱挪到C柱.当运行到N-1的时候,N就代表N-1,这时再把N-2个盘子从开始柱挪到临时柱,再把1个主子从开始柱挪到结束柱,再把n-2个柱子从临时柱挪到结束柱.不停的调用自身,直到调用的程序的N=1的时候…… 说了这些,不知道阁下懂不懂.

源代码: #include void movedisc(unsigned n,char fromneedle,char toneedle,char //在此处加入如下代码将C上的N个盘子再移回A 去掉此处代码即汉诺塔问题源代码 for(int

解决汉诺塔的基本思想是先把n个盘子除了最下面的盘子以外的所有盘子从第一根柱子(初始柱子)移动到中间那个柱子上(辅助柱子),然后把最下面的盘子移动到最后一根柱子上(目标柱子).最后把剩下的盘子移动到目标柱子上.这样,

汉诺塔 递归算法Hanoi(int n,char Start,Middle,End)beginif n=1 then 输出Start->Endelse begin Hanoi(n-1,Start,End,Middle); //要把Start的盘子借助middle移动到End 先把n-1个盘子由start移到middle //这步做完后 Start上 n-1个盘子移到中转盘 Middle上 输出 Start->End; //把Start上最后一个盘子移到End Hanoi(n-1,Middle,Start,End); endend

递归方法最重要的清楚递归逻辑,也就是func(n)函数的含义.汉诺塔的逻辑就是,先想办法把上面n-1个块挪到中间,再挪最底下那个到右侧,最后再把n-1个块挪到右侧.hanoi(n,x,y,z)的含义,就是把n个块从x挪到z上,可以利用中间柱子y.使用递归的时候,看清楚最上层逻辑就好,不要纠结递归走到下一层的具体步骤.

基本上所有递归问题都可以转化为非递归,并且由于减少了函数调用,效率有所提高.解此问题的经典算法网上很多啊,自己先看看.如果递归都不明白,怎么转为非递归呢

网站首页 | 网站地图
All rights reserved Powered by www.snrg.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com