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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© duanqichao 高级黑马   /  2016-11-20 00:54  /  1777 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 duanqichao 于 2016-11-20 00:55 编辑

  斐波那契数列算是一个非常古老的数学题目了,它的通项公式是:F(n) = F(n-1)+F(n-2)。   在编程中,利用递归的思想去求斐波那契数列也算的上是一个很经典的算法。众所周知,这也基本是所有的关于斐波那契效率最低的算法。
   但是通过这个分析这个方案为啥效率这么低,还是发现了递归一些很本质的东西:
   1:要调用的递归的方法的必须在某个时刻的返回值是确定的,也就是在满足一定的条件时,能不再调用它本身,否则就成了无穷递归,会导致桟内存溢出。在菲波那切数列的计算中,所有的计算都是基于最后方法中传入的值是否是1和2来决定是否结束递归调用(1和2返回的值都是1),例如:如果要计算第44个数列值701408733,底层就要进行701408733次循环,最后把这么多次返回值的1一个个的加起来。基本耗时在13s左右才能完成计算。
   2:递归类似于一种隐式的循环,这种重复执行不需要循环的控制。
   3:递归方法不一定有返回值。例如利用递归遍历计算机某个路径下的所有文件,但是深度未知,就可以利用方法来查找文件。可以在方法参数中传入一个文件路径,遍历该路径下的所有文件,如果是文件就输出文件名,如果是文件夹就递归调用,直到找到所有所有文件,结束递归调用。

6 个回复

倒序浏览
递归的关键是   确定结束值
回复 使用道具 举报
效率低为什么还要用呢
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
回复 使用道具 举报
6666666666
回复 使用道具 举报
回复 使用道具 举报
cyongcar 发表于 2016-11-20 12:28
效率低为什么还要用呢

虽然效率低,可这东西确实可以用递归做。另一方面想通过这个例子分析一些递归的特点。
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马