导航:首页 > 源码编译 > 汉诺塔递归算法

汉诺塔递归算法

发布时间:2022-01-18 00:23:02

① 求汉诺塔递归全过程的算法详解图,记得一定要是图释哦!!!

图解是什么意思呀。
这个算法 那么简单没必要搞得那么复杂吧。
an = an-1 + 1;
你明白这个等式的意义吗?
这个等式已经包含了递归算法的全部含义。

an 表示 n个数的和,an-1 表示n-1个数的和 ,an = an-1 + 1;表示n个数的和可以通过n-1个数的和来求的。
上述说明哪些情况可以使用递归呢?
那就是:已知前一个步骤可以求得后一个步骤的结果的情况,并且前一个步骤和后一个步骤是有规律过度的。
比如汉诺塔问题:
移n个盘是已移n-1个盘为条件的,两者的共同点是移盘。所以可以用f(n)表示移n个盘,f(n-1)表示移n-1个盘,那么移n个盘和移n-1个盘有什么关系呢?
这就需要预先分析问题才能得出具体的关系
在这个问题中,把n个盘从a移到c需要三个步骤来完成。
1.n-1个盘从a移到b
2 1个盘从a移到c
3 n-1个盘从b移到c
已知n-1个盘从a移到b是可行的,为什么?
因为移1个盘是可行,那么移2个盘也是可行,移 3个盘是已移2个盘为条件的,所以移3个盘也是可行的,所以移n个 盘是可行的。
所以根据已知条件可以解得:
设f(n, a, b,c) 表示 把n个盘从a移到c 借助b --------------------------这里很关键,这是搞懂递归的关键关键。
那么把n-1个盘从a移到b 借助c 怎样表示呢?
很明显是:f(n-1, a, c,b)
那么把1个盘从a移到c怎样表示呢?
很明显是:f(1, a, b,c)
那么把n-1个盘从b移到c 借助a 怎样表示呢?
很明显是:f(n-1, b, a,c)

所以f(n, a, b,c) = ( f(n-1, a,c,b) , f(1, a, b,c), f(n-1, b,a,c))
这和等差等比数列一个原理。
没有什么 特别的。

记住是问题有这样递推关系才可以使用这种方法。
如果要你计算1+2+8+22 的结果 你就不能使用递归。
因为该问题的后一步骤与前一步骤不具有规律性,所以已知前一个步骤并不能求的后一个步骤的值
1+2+3+4 ...+
这个问题就可以使用递归
原因你懂了吧。
至于爬楼梯问题,无限级分类 问题等一些递归问题,那不过时小菜一碟。
一句话:后一步骤依赖前一步骤并且二者联系具有规律性,运用递归必然成功。

② 汉诺塔递归函数

递归式解决逻辑问题的。基本思想是::把规模大的、较难解决的问题变成规模较小的、易解决的同一问题。规模较小的问题又变成规模更小的问题,并且小到一定程度可以直接得出它的解,从而得到原来问题的解。
C有一个汉诺塔,就是非用递归才能解决的一个问题。
利用递归算法解题,首先要对问题的以下三个方面进行分析:
一、决定问题规模的参数。需要用递归算法解决的问题,其规模通常都是比较大的,在问题中决定规模大小(或问题复杂程度)的量有哪些?把它们找出来。

二、问题的边界条件及边界值。在什么情况下可以直接得出问题的解?这就是问题的边界条件及边界值。

三、解决问题的通式。把规模大的、较难解决的问题变成规模较小、易解决的同一问题,需要通过哪些步骤或等式来实现?这是解决递归问题的难点。

③ 汉诺塔的递归算法要求源代码(朱站立数据结构上有)

给个过程吧
H(n,a,b,c)表示把n个盘子从a柱通过b柱挪到c柱需要的步数
program H(n:longint;a,b,c:char):longint;
begin
if n=1 then
begin
writeln(a,'->',c);//一个盘子只需一步
exit;
end;
H(n-1,a,c,b); //为了把它们移到c柱,先要通过c柱移到b柱,这你可以手工算一下
inc(step);//步数加一
writeln(a,'->',c);
H(n-1,b,a,c); //再从b柱移到c柱
end.

④ 汉诺塔递归算法分析

我之前回答过的,http://..com/question/499530116.html?oldq=1&from=evaluateTo#reply-box-1259261416

⑤ 汉诺塔分治递归算法解释!

hanoi中的参数:从A(源)通过B(中转)移动到C(目的)
先把n-1个从A通过C移动到B:hanoi(n-1,A,C,B,time);
再把最后那个从A移到C:move(A,C);
然后把那n-1个从B通过A移到C:hanoi(n-1,B,A,C,time)
注意每一步的目的是什么

⑥ 汉诺塔递归算法

1个只要1次2个碟子要3次3个要7次归纳法可以推得复杂度为2^n-1这个可以证明的,只是证明很复杂。

⑦ 递归算法 汉诺塔 演示

整理分析结果:把第1步中化简问题的条件作为递归 结束条件,将第3步分析得到的算法作为递归算法。
定义函数movedisc( n,fromneedle,toneedle,usingneedle)。将 fromneedle 杆上的 N 个圆盘,借助 usingneedle 杆,移动到 toneedle 杆上。
移动N个圆盘的递归算法描述如下:
movedisc ( n,fromneedle,toneedle,usingneedle )
{ if ( n==1 ) 将 n 号圆盘从 fromneedle 上移到 toneedle;
else {
① movedisc ( n-1,fromneedle,usingneedle,toneedle )
② 将 n 号圆盘从 fromneedle 上移到 toneedle;
③ movedisc ( n-1,usingneedle,toneedle,fromneedle )
}
}

下面是程序
int i=0; /* 移动圆盘数量计数器 */
main( )
{ unsigned n;
scanf ("%d", &n);
movedisc ( n,’a’,’b’,’c’); /* 将A上的N个圆盘借助C将移动到B上 */
printf( "\t Total: %d\n", i );
}
movedisc ( n, fromneedle, toneedle, usingneedle )
unsigned n;
char fromneedle, toneedle, usingneedle;
{ if ( n == 1 )
printf("%2d-(%2d): %c ==> %c\n",++i, n,fromneedle,toneedle);
else {
movedisc ( n-1, fromneedle, usingneedle, toneedle );
printf("%2d-(%2d): %c ==> %c\n",++i, n,fromneedle,toneedle);
movedisc ( n-1, usingneedle, toneedle, fromneedle );
}
}

⑧ 汉诺塔问题的递归算法流程图

关键是第一步移法,奇数层的说,3层在第一柱,后两根柱数数:123。所以,第一块应放在第二根柱,4层,第一块放第三柱。...........奇数层第一块放第二柱,偶数层第一块放第三柱。

⑨ 汉诺塔 递归算法的详细解释请教高手

为了实现 n个盘从 借助c 从a 移动到 b
思路如下:
首先考虑极限当只有一个盘的时候 只要 盘直接从 a -> b即可
那么当有2个盘的时候就只要先把1号盘从a -> c 然后 把2号盘 a->b 再 把 2好盘从 c - > b
那么当有n个盘的时候你只要先把 n-1个 盘 借助 b 移动到 c 然后将 n号盘从 a -> b
那么这时候只要将 n-1想办法从c移动到 b 借助 a 那么就可以先把 n-2个盘借助b移动到a
然后 把n-1号盘从c-> b如此递归就是了!
#include <stdio.h>

void mov(int n,char a,char b)
{
printf("盘%d : 从 %c ---> %c\n",n,a,b);
}

void Hanoi(int n,char a,char b,char c)
{
if(n == 0) return ;
Hanoi(n-1,a,c,b);
mov(n,a,b);
Hanoi(n-1,c,b,a);

}
int main()
{
Hanoi(2,'a','b','c');
return 0;
}

java汉诺塔递归算法

moveDish(level-1,from,to,inter);
是指的自把
level-1
个盘子百从度
from
借助
to
,移到
inter
上。
另外,System.out.println("3从"+from+"移动问盘子"+level+"号到"+to);里的3是多余答的。
就为System.out.println("从"+from+"移动盘子"+level+"号到"+to);

阅读全文

与汉诺塔递归算法相关的资料

热点内容
查看linux内核参数 浏览:776
幼儿初学史丰收速算法指法视频 浏览:428
pythonacquire参数 浏览:825
汤普森钢琴教程2pdf 浏览:490
程序员小陈别墅 浏览:614
固态编译器损坏 浏览:3
android控件显示和隐藏 浏览:186
国产编译dspic的软件 浏览:295
隐尤app是什么 浏览:494
钉钉作业怎么传到文件夹 浏览:186
pg库二进制和源码的区别 浏览:328
群星服务器怎么看 浏览:144
玛雅服务器名称是什么 浏览:819
源码乐园官网 浏览:892
加密币前景 浏览:881
安卓正面接口和反面接口什么意思 浏览:710
怎样把文件夹的名字去掉 浏览:960
清理系统垃圾的命令 浏览:641
安卓手机分身老闪退怎么办 浏览:911
爱快安装提示需要解压 浏览:445