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 相关文章推荐
jQuery创建自己的插件(自定义插件)的方法
Jun 10 Javascript
jQuery Migrate 1.1.0 Released 注意事项
Jun 14 Javascript
javascript常见数据验证插件大全
Aug 03 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
Sep 18 Javascript
NODE.JS跨域问题的完美解决方案
Oct 20 Javascript
在一个页面实现两个zTree联动的方法
Dec 20 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
Aug 08 jQuery
vue实例中data使用return包裹的方法
Aug 27 Javascript
swiper在vue项目中loop循环轮播失效的解决方法
Sep 15 Javascript
vue项目中常见问题及解决方案(推荐)
Oct 21 Javascript
Javascript和jquery在selenium的使用过程
Oct 31 jQuery
解决vue+elementui项目打包后样式变化问题
Aug 03 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
php实现利用phpexcel导出数据
2013/08/24 PHP
浅谈javascript 面向对象编程
2009/10/28 Javascript
js Date概念详细介绍
2013/11/22 Javascript
用C/C++来实现 Node.js 的模块(二)
2014/09/24 Javascript
jQuery实现的向下图文信息滚动效果
2015/05/03 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
2016/02/25 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
2016/05/25 Javascript
JS判断键盘是否按的回车键并触发指定按钮点击操作的方法
2017/02/13 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
Vue2.0生命周期的理解
2018/08/20 Javascript
NUXT SSR初级入门笔记(小结)
2019/12/16 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
js实现抽奖功能
2020/11/24 Javascript
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[01:14]英雄,所敬略同——2018完美盛典宣传视频4K
2018/12/05 DOTA
python实现统计代码行数的方法
2015/05/22 Python
在python中使用正则表达式查找可嵌套字符串组
2017/10/24 Python
Python分支结构(switch)操作简介
2018/01/17 Python
使用python存储网页上的图片实例
2018/05/22 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
2018/11/29 Python
Python3内置模块之json编解码方法小结【推荐】
2020/12/09 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
利用Python库Scapy解析pcap文件的方法
2019/07/23 Python
Python 二叉树的层序建立与三种遍历实现详解
2019/07/29 Python
Python更换pip源方法过程解析
2020/05/19 Python
Pytorch环境搭建与基本语法
2020/06/03 Python
Pytorch生成随机数Tensor的方法汇总
2020/09/09 Python
PyCharm+Miniconda3安装配置教程详解
2021/02/16 Python
Luxplus丹麦:香水和个人护理折扣
2018/04/23 全球购物
英国羊绒服装购物网站:Pure Collection
2018/10/22 全球购物
小学一年级评语大全
2014/04/22 职场文书
植树节口号
2014/06/21 职场文书
幼儿园教师师德表现自我评价
2015/03/05 职场文书