javascript递归函数定义和用法示例分析


Posted in Javascript onJuly 22, 2020

递归函数:是指函数直接或间接调用函数本身,则称该函数为递归函数。

这句话理解起来并不难,从概念上出发,给出以下的例子:

function foo(){
 console.log("函数 foo 是递归函数。");
 foo();
}

这个例子的 foo 函数就是一个递归函数。

当你把这个函数拿到浏览器上运行的时候,你会发现内存溢出了,为什么呢?因为这个递归函数没有停止处理或运算的出口,因此这个递归函数就演变为一个死循环。

那如何使用递归呢?

使用递归函数必须要符合两个条件:

1、 在每一次调用自己时,必须是(在某种意义上)更接近于解;

这句话怎么理解?

大家家里都有楼梯吧?比如从一楼走到二楼,那么我们的起点是一楼,目的地是二楼,当你往上每走一个台阶是不是越接近二楼,也就是越接近目的地。
因此这句话可以这样理解:函数每一次调用自己时,就越接近于我们期望它完成的任务的终点。

2、必须有一个终止处理或计算的出口

这句话的意思是:必须要有一个标准的标志,让函数结束调用函数自身。
比如,怎么知道你已经走到二楼了呢?当你看到有个门,门牌上写着 2F 的,然后推开它跨过去,那么你就到二楼了。

用递归输出对象里包含的所有属性值(包括对象里的子孙对象):

var obj = {
 a:{
  name:"john",
  age:26,
  sex:"male",
  child:{
   firstChild:"mak",
   laseChild:"loy"
  }
 },

 b:{
  name:"joe", 
  age:28, 
  sex:"female", 
  child:{
   firstChild:"bill", 
   secondChild:"ruth", 
   laseChild:"yoki"
  }
 }
};

function getObjValue(obj){
 for(var k in obj){
  if(typeof obj[k] !== "object"){
   console.log(obj[k]); //递归出口
  }else{
   getObjValue(obj[k]); //函数调用函数自身
  }
 }
};

getObjValue(obj);

// 输出结果:

// name=john
// age=26
// sex=male
// firstChild=mak
// laseChild=loy
// name=joe
// age=28
// sex=female
// firstChild=bill
// secondChild=ruth
// laseChild=yoki

使用建议:在使用递归时,要注意对递归函数的参数类型的检查,一定要保证有一个终止处理或计算的出口。否则很容易演变为死循环,从而造成内存溢出。

到此这篇关于javascript递归函数定义和用法示例分析的文章就介绍到这了,更多相关javascript递归函数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
ie和firefox不兼容的解决方法集合
Apr 28 Javascript
JQery jstree 大数据量问题解决方法
Mar 09 Javascript
jquery中通过过滤器获取表单元素的实现代码
Jul 05 Javascript
用JavaScript实现动画效果的方法
Jul 20 Javascript
jquery五角星评分插件示例分享
Feb 21 Javascript
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
Apr 12 Javascript
jQuery实现网站添加高亮突出显示效果的方法
Jun 26 Javascript
VueJs使用Amaze ui调整列表和内容页面
Nov 30 Javascript
node打造微信个人号机器人的方法示例
Apr 26 Javascript
手淘flexible.js框架使用和源代码讲解小结
Oct 15 Javascript
JavaScript键盘事件常见用法实例分析
Jan 03 Javascript
Vue vm.$attrs使用场景详解
Mar 08 Javascript
简单了解vue 插值表达式Mustache
Jul 22 #Javascript
详解node.js 事件循环
Jul 22 #Javascript
jQuery+ThinkPHP实现图片上传
Jul 23 #jQuery
详解vue中v-on事件监听指令的基本用法
Jul 22 #Javascript
使用vue实现通过变量动态拼接url
Jul 22 #Javascript
浅谈JavaScript窗体Window.ShowModalDialog使用
Jul 22 #Javascript
解决vue里a标签值解析变量,跳转页面,前面加默认域名端口的问题
Jul 22 #Javascript
You might like
简单采集了yahoo的一些数据
2007/02/14 PHP
php5新改动之短标记启用方法
2008/09/11 PHP
PHP安全的URL字符串base64编码和解码
2014/06/19 PHP
php实现微信扫码自动登陆与注册功能
2016/09/22 PHP
php中final关键字用法分析
2016/12/07 PHP
采用CSS和JS,刚好我最近有个站点要用到下拉菜单!
2006/06/26 Javascript
ECMAScript 创建自己的js类库
2012/11/22 Javascript
使用javascript实现雪花飘落的效果
2015/01/13 Javascript
深入浅析JavaScript中对事件的三种监听方式
2015/09/29 Javascript
jQuery中hover与mouseover和mouseout的区别分析
2015/12/24 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
js事件委托和事件代理案例分享
2017/07/25 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
jqueryUI tab标签页代码分享
2017/10/09 jQuery
利用SpringMVC过滤器解决vue跨域请求的问题
2018/02/10 Javascript
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
2019/05/09 Javascript
python中正则表达式的使用详解
2014/10/17 Python
django批量导入xml数据
2016/10/16 Python
Python面向对象编程基础解析(二)
2017/10/26 Python
Python设置在shell脚本中自动补全功能的方法
2018/06/25 Python
nginx搭建基于python的web环境的实现步骤
2020/01/03 Python
执行Python程序时模块报错问题
2020/03/26 Python
python 读txt文件,按‘,’分割每行数据操作
2020/07/05 Python
实例讲解使用HTML5 Canvas绘制阴影效果的方法
2016/03/25 HTML / CSS
李维斯牛仔裤英国官方网站:Levi’s英国
2019/10/10 全球购物
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
致百米运动员广播稿
2014/01/29 职场文书
工程安全员岗位职责
2014/03/09 职场文书
小学数学教研活动总结
2014/07/01 职场文书
学校党的群众路线教育实践活动对照检查材料
2014/09/24 职场文书
2014年实习生工作总结
2014/11/27 职场文书
工作总结之小学教师体育工作范文(3篇)
2019/10/07 职场文书
深度学习详解之初试机器学习
2021/04/14 Python
MySQL三种方式实现递归查询
2022/04/18 MySQL
CSS控制继承中的height能变为可继承吗
2022/06/10 HTML / CSS