递归

递归是一种解决问题的方法,通常我们可以理解成函数调用自身;

什么递归?递归怎么写?

首先直接调用自身的方法和函数,他是一个递归,我们看代码:
复制代码
var recursiveFun = function(params){recursiveFun(params);
}
// or
var recursiveFun1 = function(params){recursiveFun2(params);
}
var recursiveFun2 = function(params){recursiveFun1(params);
}
复制代码

假设现在我们要执行recursiveFun() or recursiveFun1(); 从上面函数,我们能知道他会一直重复调用;因此,每个递归函数都需要有边界条件,我们通俗一点,可以叫它停止点,作用是为了防止无限递归。

如果防止递归停止,无限递归带来的问题

我们先思考一个问题,如果忘记加上停止递归函数的边界条件,会发生什么呢? 会一直执行函数吗?

答案是不会,递归并不会无限的执行下去,浏览器会抛出错误,也就是所谓的栈溢出错误;我们可以通过以下代码来测试:

var i = 0;
var recursiveFun = function(){i++;recursiveFun();
}
try {recursiveFun();
} catch (err) {console.log(`i=${i}error:${err}`)
}
复制代码

以上是运行结果,从图中我们能看出在执行15661次后浏览器给我们抛出了错误:RangeError: Maximum call stack size exceeded; 超过最大调用栈大小; 我们如何停止递归呢;我们只需要加一个条件即可;假设我们条件是当i累加到100的时候停止。代码如下:

var i = 0;
var recursiveFun = function(){if (i > 100) return;i++;recursiveFun();
}
try {recursiveFun();
} catch (err) {console.log(`i=${i}error:${err}`)
}
复制代码

总结

我们得到一个结论,具有停止递归的边界条件很重要;

转载于:https://juejin.im/post/5cb02d15f265da03b8583fd3

浅谈javascript递归(白话版)相关推荐

  1. 浅谈 JavaScript 编程语言的编码规范--转载

    原文:http://www.ibm.com/developerworks/cn/web/1008_wangdd_jscodingrule/ 对于熟悉 C/C++ 或 Java 语言的工程师来说,Jav ...

  2. JavaScript 中的 require / exports、import / export、浅谈JavaScript、ES5、ES6

    Node.js 的基础教学 之 exports 和 module.exports:https://zhuanlan.zhihu.com/p/82057593 浅谈 JavaScript.ES5.ES6 ...

  3. 浅谈javascript中原型(prototype)、构造函数、对象实例及三者之间的关系

    转自:http://www.cnblogs.com/zhangwei412827/archive/2012/12/14/2816263.html 浅谈javascript中原型(prototype). ...

  4. 浅谈JavaScript作用域,关于Java的学习路线资料

    javascript是目前web领域中使用非常广泛的语言,不管是在前端还是在后端都能看到它的影子,可以说web从业者不论怎样都绕不开它.在前端领域,各种框架层出不穷.在后端领域,nodejs可谓如火如 ...

  5. html 滚动条 scrolltop scrollheight,浅谈JavaScript中scrollTop、scrollHeight、offsetTop、offsetHeight...

    浅谈JavaScript中scrollTop.scrollHeight.offsetTop.offsetHeight 发布时间:2020-07-17 09:27:20 来源:亿速云 阅读:223 作者 ...

  6. 浅谈 JavaScript 编程语言的编码规范

    转自:http://www.ibm.com/developerworks/cn/web/1008_wangdd_jscodingrule/?ca=drs-tp4608 developerWorks 中 ...

  7. 浅谈JavaScript中的NaN

    浅谈JavaScript中的NaN NaN概念以及简单案例 追寻的纯粹该拥有自己的本质.-JC.F 什么是NaN? NaN:NaN(Not a Number),它表示不是数字,但是仍是数值类型. Na ...

  8. python封装继承多态_浅谈JavaScript的面向对象和它的封装、继承、多态

    写在前面 既然是浅谈,就不会从原理上深度分析,只是帮助我们更好地理解... 面向对象与面向过程 面向对象和面向过程是两种不同的编程思想,刚开始接触编程的时候,我们大都是从面向过程起步的,毕竟像我一样, ...

  9. js跟php增加删除信息,浅谈JavaScript数组的添加和删除

    本文给大家浅谈一下JavaScript数组的添加和删除 ,有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 1.添加 (1)最简单的方法:为新索引赋值 (2)使用push()和unsh ...

最新文章

  1. mass Framework emitter模块
  2. 我做自媒体每日的工作时间安排
  3. Linux命令解释之chown
  4. java http get 图片_http协议get方法获取图片并保存到本地
  5. C# label控件竖直显示 label控件垂直显示
  6. c++ 11 之lambda
  7. 黑马vue实战项目-(一)项目初始化登录功能开发
  8. Mac 用命令行彻底卸载VMware Fusion
  9. 苹果app充值限制解除_2020还在充值退款?正规苹果app手游充值折扣来了!
  10. 一个low逼的boofuzz脚本生成器
  11. TCP归纳总结,一图流
  12. linux服务器运维管理学习
  13. 【干货】张小龙的30条产品法则
  14. Windows下安装 gmpy2
  15. eversync safari_值得推荐的chrome书签同步插件汇总
  16. 如何获取用户的openid
  17. java通信:远程画板
  18. 实现qq的在线聊天技术
  19. scrapy爬虫框架教程(二)-- 爬取豆瓣电影
  20. Linux的ioctl和fcntl

热门文章

  1. es查询大文本效率_es之路由:进一步提高Elasticsearch的检索效率(适用大规模数据集)...
  2. 计算机应用领域的CIMS,计算机的应用领域
  3. php留言板记录ip,如何用php程序记录来访IP
  4. Realtime Ray Tracing RenderMan Point Cloud
  5. Python-循环控制--个人课堂笔记
  6. 利用MyBatis Generator自动创建代码
  7. Request.ServerVariables的详细应用(转)
  8. python实习生面试题_大数据分析实习生面试题库
  9. Generative Adversarial Learning Towards Fast Weakly Supervised Detection(CVPR2018)阅读笔记
  10. virtualenv模块使用