博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JAVASCRIPT】递归与循环的效率比较
阅读量:5840 次
发布时间:2019-06-18

本文共 670 字,大约阅读时间需要 2 分钟。

递归与循环是两种不同的解决问题的典型思路。

递归算法:

  优点:代码简洁、清晰,并且容易验证正确性。(如果你真的理解了算法的话,否则你更晕)

  缺点:它的运行需要较多次数的函数调用,如果调用层数比较深,需要增加额外的堆栈处理,比如参数传递需要压栈等操作,会对执行效率有一定影响。但是,对于某些问题,如果不使用递归,那将是极端难看的代码。

循环算法:

  优点:速度快,结构简单。

  缺点:并不能解决所有的问题。有的问题适合使用递归而不是循环。如果使用循环并不困难的话,最好使用循环。

递归算法 和循环算法总结

   1. 一般递归调用可以处理的算法,也通过循环去解决常需要额外的低效处理 。

  2. 现在的编译器在优化后,对于多次调用的函数处理会有非常好的效率优化,效率未必低于循环。

为了检测这两种算法的效率,net小伙专门做了一个测试,代码如下:

注意:代码中必须有四个事件变量;

测试结果如下:(表中红色数字表示所需要的时间)

 循环次数 循环 递归
100 1 1
1000 1 2
10000  5 堆栈溢出

 

 

 

 

 

  为什么会出现堆栈溢出呢?

  大家都知道递归的实现是通过调用函数本身,函数调用的时候,每次调用时要做地址保存,参数传递等,这是通过一个递归工作栈实现的。具体是每次调用函数本身要保存的内容包括:局部变量、形参、调用函数地址、返回值。那么,如果递归调用N次,就要分配N*局部变量、N*形参、N*调用函数地址、N*返回值。

  当递归的次数太大的时候内存不足便会出现堆栈溢出的状况了!

  循环和递归根据具体情况使用!

 

转载地址:http://xpvcx.baihongyu.com/

你可能感兴趣的文章
和菜鸟一起学linux总线驱动之初识spi驱动数据传输流程【转】
查看>>
WorkFlow设计篇Step.4—异常处理(续)-WF4.0
查看>>
GNU make manual 翻译( 一百零三)
查看>>
深入浅出 React Native:使用 JavaScript 构建原生应用
查看>>
RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-> Web版本新增新的用户权限设置界面效率更高、更规范...
查看>>
Java可视化AWT
查看>>
Foundations of Python Network Programming - 读书笔记系列(3) - Email Services
查看>>
[LeetCode] Lowest Common Ancestor of a Binary Tree 二叉树的最小共同父节点
查看>>
Oracle下建立dblink时的权限问题
查看>>
chrome浏览器,调试详解,调试js、调试php、调试ajax
查看>>
jQuery Ajax 回顾
查看>>
Python天天美味(8) - 字符串中的字符倒转
查看>>
点在多边形内算法,C#判断一个点是否在一个复杂多边形的内部
查看>>
如何在移动设备上搭建服务器承载自己的全景作品?
查看>>
iOS SQLite3数据库操作
查看>>
除了 iOS 和 Android,世界第三大移动系统是什么?
查看>>
35.7. FAQ
查看>>
深搜算法实例:老鼠走迷宫(一)
查看>>
VMWare网络设置的3中方式(转)
查看>>
支付这条线上 谁在赚钱谁在哭?
查看>>