A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王月 中级黑马   /  2012-6-9 00:10  /  3566 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王月 于 2012-6-26 16:26 编辑

今天学到递归了,它主要是解决了多层循环的效率低下问题。可它也是在不断的调用自己啊,这不是和循环一样的吗,好像只是代码少了点而已。
拿下面这个例子来说,真的提高了效率吗,请教大侠了,帮我解释下



评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
和循环不一样!目录下还有子目录 子目录又有目录 还继续有目录 那你要循环多少次!C:\新建文件夹\新建文件夹\新建文件夹\新建文件夹 就是4级目录都要搞死你更别说某些计算题  当然某些情况用递归确实没有什么效率 好比现实中你到某个地方 走路只要花10分钟,如果是做公车就2分钟, 但是你做公车要等10分钟公交才能到,估计你会选择走路到那个地方
回复 使用道具 举报
递归与循环是两种不同的解决问题的思路。

递归
优点:代码简洁、清晰,并且容易验证正确性。(如果你真的理解了算法的话,否则你更晕)
缺点:它的运行需要较多次数的函数调用,对执行效率有影响。但是,对于某些问题,如果不使用递归,那将是极端难看的代码。

循环:
优点:速度快,结构简单。
缺点:并不能解决所有的问题。有的问题适合使用递归而不是循环。如果使用循环并不困难的话,最好使用循环。
回复 使用道具 举报
递归与循环是两种不同的解决问题的典型思路。 递归算法: 优点:代码简洁、清晰,并且容易验证正确性。(如果你真的理解了算法的话,否则你更晕) 缺点:它的运行需要较多次数的函数调用,如果调用层数比较深,需要增加额外的堆栈处理,比如参数传递需要压栈等操作,会对执行效率有一定影响。但是,对于某些问题,如果不使用递归,那将是极端难看的代码。 循环算法: 优点:速度快,结构简单。 缺点:并不能解决所有的问题。有的问题适合使用递归而不是循环。如果使用循环并不困难的话,最好使用循环。 递归算法 和循环算法总结 1. 一般递归调用可以处理的算法,也通过循环去解决常需要额外的低效处理 。 2. 现在的编译器在优化后,对于多次调用的函数处理会有非常好的效率优化,效率未必低于循环。
递归和循环两者完全可以互换。 递归:递归效率低一些,它的运行需要较多次数的函数调用,如果调用层数比较深,需要增加额外的堆栈处理,比如参数传递需要压栈等操作,会对执行效率有一定影响, 但程序容易理解,代码写的少。代码简洁、清晰,并且容易验证正确性。 根据你对程序的效率,以及容易理解性 来综合。 循环:效率高,速度快,结构简单。 但是,有些问题,用循环的话,程序难于编写。也不易理解。 综上所述:循环和递归可以互换。如果用循环可以搞写的话,就尽量用循环。否则如果用递归容易理解,而程序本身对效率的要求也不是很高的话,就用递归。
用递归的地方都能用循环, 只要尽量少用递归就行了. 因为递归的效率低.
回复 使用道具 举报
1.求n!时,n!=n*(n-1)!,而(n-1)!=(n-1)*(n-2),依此类推,直到1!=1为止,就是个递归问题.
2.一个循环如:while(a<0){……}.
递归和循环有些相似的地方,递归问题都可以用循环来代替,但是在程序的篇幅上和复杂程序上就有一定增加了递归和循环一样都是需要一个口停止这个“循环”的过程。递归在事先不知道第一个值得时候用,进而一步一步推出要输出的值,而循环式用重复的方法一个个往下执行,一个个得出值,是顺序得出,递归是倒序得出。

一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
注意:
(1) 递归就是在过程或函数里调用自身;
(2) 在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口。

递归算法一般用于解决三类问题:
(1)数据的定义是按递归定义的。(Fibonacci函数)
(2)问题解法按递归算法实现。(回溯)
(3)数据的结构形式是按递归定义的。(树的遍历,图的搜索)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马