递归算法
开放分类:数学术语术语科学自然科学计算机术语
递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。
编辑摘要
目录
1概述
2汉诺塔C语言递归算法
递归算法 - 概述
程序调用自身的编程技巧称为递归( recursion)。
一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。用递归思想写出的程序往往十分简洁易懂。
一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
注意:
(1) 递归就是在过程或函数里调用自身;
(2) 在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口,否则将无限进行下去(死锁)。
递归算法一般用于解决三类问题:
(1)数据的定义是按递归定义的。(Fibonacci函数)
(2)问题解法按递归算法实现。(回溯)
(3)数据的结构形式是按递归定义的。(树的遍历,图的搜索)
递归的缺点:
递归算法解题的运行效率较低。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。
递归算法 - 汉诺塔C语言递归算法
递归算法 递归算法图册
汉 诺(Hanoi)塔问题:古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图)。有一个和尚想把这 64个盘子从A座移到C座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求 打印移动的步骤。
这个问题在盘子比较多的情况下,很难直接写出移动步骤。我们可以先分析盘子比较少的情况。假定盘子从大向小依次为:盘子1,盘子2,...,盘子64。
如果只有一个盘子,则不需要利用B座,直接将盘子从A移动到C。
如果有2个盘子,可以先将盘子1上的盘子2移动到B;将盘子1移动到c;将盘子2移动到c。这说明了:可以借助B将2个盘子从A移动到C,当然,也可以借助C将2个盘子从A移动到B。
如果有3个盘子,那么根据2个盘子的结论,可以借助c将盘子1上的两个盘子从A移动到B;将盘子1从A移动到C,A变成空座;借助A座,将B上的两个盘子移动到C。这说明:可以借助一个空座,将3个盘子从一个座移动到另一个。
如果有4个盘子,那么首先借助空座C,将盘子1上的三个盘子从A移动到B;将盘子1移动到C,A变成空座;借助空座A,将B座上的三个盘子移动到C。
上述的思路可以一直扩展到64个盘子的情况:可以借助空座C将盘子1上的63个盘子从A移动到B;将盘子1移动到C,A变成空座;借助空座A,将B座上的63个盘子移动到C。
根据以上的分析,不难写出程序:
void Move(char chSour,char chDest)
{
/打印移动步骤/
printf("\nMove the top plate of %c to %c",chSour,chDest);
}
Hanoi(int n,char chA,char chB,char chC)
{
/检查当前的盘子数量是否为1/
/盘子数量为1,打印结果后,不再继续进行递归/
if(n==1)Move(chA,chC);
/盘子数量大于1,继续进行递归过程/
else
{
Hanoi(n-1,chA,chC,chB);
Move(chA,chC);
Hanoi(n-1,chB,chA,chC);
}
}
main()
{
int n ;
/输入盘子的数量/
printf("\nPlease input number of the plates: ");
scanf("%d",&n);
printf("\nMoving %d plates from A to C:",n);
/*调用函数计算,并打印输出结果*/
Hanoi(n,'A','B','C');
}
如果n为4,程序输出结果为:
Moving 4 plates from A to C:
Move the top plate of A to B
Move the top plate of A to C
Move the top plate of B to C
Move the top plate of A to B
Move the top plate of C to A
Move the top plate of C to B
Move the top plate of A to B
Move the top plate of A to C
Move the top plate of B to C
Move the top plate of B to A
Move the top plate of C to A
Move the top plate of B to C
Move the top plate of A to B
Move the top plate of A to C
Move the top plate of B to C
相关文献
万方数据期刊论文一类多折叠环面混沌吸引子 - 物理学报 - 200453 ( 7 )
万方数据期刊论文基于二叉树思想的任意多边形三角剖分递归算法 - 武汉大学学报(信息科学版) - 200227 ( 5 )
万方数据期刊论文基于受控递归算法的时频分析 - 电子科技大学学报 - 201140 ( 5 )
经典计算机算法介绍
算法是计算机科学中一门古老而常新的学科,就像一个人的思维能力一样,其重要性对于计算机性能的分析、应用与改进有着至不言而喻的地位。而随着计 算机科学技术的发展,新的算法也随着新的应用渐渐出现,但总有一些算法由于其本身具有的特点以及对计算机科学发展做出的卓越贡献而成为经典,本任务就是要 介绍这些经典算法。
Dijkstra算法
哈希表算法
贪婪算法
随机化算法
排序算法 分治算法
最优二叉树算法
回溯算法
舍伍德算法
拉斯维加斯算法 分支界限算法
递归算法
统计算法
动态规划算法
流水线算法 最大流
最小费用流
蒙特卡洛算法
搜索算法
单纯行算法
附图
递归算
递归算法
点击认领
开放分类:数学术语术语科学自然科学计算机术语
递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。
编辑摘要
目录
1概述
2汉诺塔C语言递归算法
递归算法 - 概述
程序调用自身的编程技巧称为递归( recursion)。
一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。用递归思想写出的程序往往十分简洁易懂。
一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
注意:
(1) 递归就是在过程或函数里调用自身;
(2) 在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口,否则将无限进行下去(死锁)。
递归算法一般用于解决三类问题:
(1)数据的定义是按递归定义的。(Fibonacci函数)
(2)问题解法按递归算法实现。(回溯)
(3)数据的结构形式是按递归定义的。(树的遍历,图的搜索)
递归的缺点:
递归算法解题的运行效率较低。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。
递归算法 - 汉诺塔C语言递归算法
递归算法 递归算法图册
汉 诺(Hanoi)塔问题:古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图)。有一个和尚想把这 64个盘子从A座移到C座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求 打印移动的步骤。
这个问题在盘子比较多的情况下,很难直接写出移动步骤。我们可以先分析盘子比较少的情况。假定盘子从大向小依次为:盘子1,盘子2,...,盘子64。
如果只有一个盘子,则不需要利用B座,直接将盘子从A移动到C。
如果有2个盘子,可以先将盘子1上的盘子2移动到B;将盘子1移动到c;将盘子2移动到c。这说明了:可以借助B将2个盘子从A移动到C,当然,也可以借助C将2个盘子从A移动到B。
如果有3个盘子,那么根据2个盘子的结论,可以借助c将盘子1上的两个盘子从A移动到B;将盘子1从A移动到C,A变成空座;借助A座,将B上的两个盘子移动到C。这说明:可以借助一个空座,将3个盘子从一个座移动到另一个。
如果有4个盘子,那么首先借助空座C,将盘子1上的三个盘子从A移动到B;将盘子1移动到C,A变成空座;借助空座A,将B座上的三个盘子移动到C。
上述的思路可以一直扩展到64个盘子的情况:可以借助空座C将盘子1上的63个盘子从A移动到B;将盘子1移动到C,A变成空座;借助空座A,将B座上的63个盘子移动到C。
根据以上的分析,不难写出程序:
void Move(char chSour,char chDest)
{
/打印移动步骤/
printf("\nMove the top plate of %c to %c",chSour,chDest);
}
Hanoi(int n,char chA,char chB,char chC)
{
/检查当前的盘子数量是否为1/
/盘子数量为1,打印结果后,不再继续进行递归/
if(n==1)Move(chA,chC);
/盘子数量大于1,继续进行递归过程/
else
{
Hanoi(n-1,chA,chC,chB);
Move(chA,chC);
Hanoi(n-1,chB,chA,chC);
}
}
main()
{
int n ;
/输入盘子的数量/
printf("\nPlease input number of the plates: ");
scanf("%d",&n);
printf("\nMoving %d plates from A to C:",n);
/*调用函数计算,并打印输出结果*/
Hanoi(n,'A','B','C');
}
如果n为4,程序输出结果为:
Moving 4 plates from A to C:
Move the top plate of A to B
Move the top plate of A to C
Move the top plate of B to C
Move the top plate of A to B
Move the top plate of C to A
Move the top plate of C to B
Move the top plate of A to B
Move the top plate of A to C
Move the top plate of B to C
Move the top plate of B to A
Move the top plate of C to A
Move the top plate of B to C
Move the top plate of A to B
Move the top plate of A to C
Move the top plate of B to C
相关文献
万方数据期刊论文一类多折叠环面混沌吸引子 - 物理学报 - 200453 ( 7 )
万方数据期刊论文基于二叉树思想的任意多边形三角剖分递归算法 - 武汉大学学报(信息科学版) - 200227 ( 5 )
万方数据期刊论文基于受控递归算法的时频分析 - 电子科技大学学报 - 201140 ( 5 )
经典计算机算法介绍
算法是计算机科学中一门古老而常新的学科,就像一个人的思维能力一样,其重要性对于计算机性能的分析、应用与改进有着至不言而喻的地位。而随着计 算机科学技术的发展,新的算法也随着新的应用渐渐出现,但总有一些算法由于其本身具有的特点以及对计算机科学发展做出的卓越贡献而成为经典,本任务就是要 介绍这些经典算法。
Dijkstra算法
哈希表算法
贪婪算法
随机化算法
排序算法 分治算法
最优二叉树算法
回溯算法
舍伍德算法
拉斯维加斯算法 分支界限算法
递归算法
统计算法
动态规划算法
流水线算法 最大流
最小费用流
蒙特卡洛算法
搜索算法
单纯行算法
附图
为本词条添加视频和组图相关影像
开放分类:我来补充
数学术语 术语 科学 自然科学 计算机术语 计算机科学技术名词 计算机算法 计算机编程
互动百科的词条(含所附图片)系由网友上传,如果涉嫌侵权,请与客服联系,我们将按照法律之相关规定及时进行处理。未经许可,禁止商业网站等复制、抓取本站内容;合理使用者,请注明来源于www.baike.com。
欢迎加入互动百科大家庭,和互动百科超过770万专业认证智愿者一起,分享你的真知灼见。
如果你对大家的讨论有兴趣,可以点击“赞”和“鄙视”的大拇指,来表达你的看法。
讨论区的精彩内容,会被用户顶到最上面,让更多人感受到大家的推荐,你注意到了吗?
登录后使用互动百科的服务,将会得到个性化的提示和帮助,还有机会和770多万专业认证智愿者沟通。
互动百科用户登录
您也可以使用以下网站账号登录:
人人网账号登录
QQ账号登录
新浪微博账户登录
此词条还可添加 信息模块
递归算法图册
WIKI热度
该词条未被认领,赶快点击认领吧!
编辑次数:13次 历史版本
参与编辑人数:11位
最近更新时间:2013-11-13 10:48:11
贡献光荣榜
更多
创建者:不*死鸟
我爱你的眼睛
中国语言文学副教授
無國界
大学生
hzwjh
大学生
绿领巾
中国语言文学讲师
宫华
大学生
相关词条
编辑
JDBC
java数据库连接
plascal教程
递归可枚举集
EOS
PHP
可计算性理论
nesC
anaconda
pascal语言教…
分类热词
函数
中央处理器
五角星
物理学
运算放大器
质量
圆周率
三角函数
压力
相对论
请提意见
帮助中心
服务热线:86-10-62303127(9:00-21:00)
关于我们
新闻中心
服务协议
互动合作
友情链接
招聘信息
联系我们
站点地图
知识官网
百科营销
互动在线 版权所有 Powered by HDwiki © 2015
编辑
分享
赞
扫描二维码用手机浏览词条
保存二维码可印刷到宣传品
你感兴趣
JDBC JDBC
递归可枚举集 递归可枚举集
EOS EOS
PHP PHP
关闭