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 相关文章推荐
javascript模块化是什么及其优缺点介绍
Sep 02 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
Jan 08 Javascript
jQuery插件jPaginate实现无刷新分页
May 04 Javascript
angular4模块中给标签添加背景图的实现方法
Sep 15 Javascript
Node.js readline 逐行读取、写入文件内容的示例
Mar 01 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
Apr 10 Javascript
element-ui upload组件多文件上传的示例代码
Oct 17 Javascript
Three.js实现3D机房效果
Dec 30 Javascript
[原创]微信小程序获取网络类型的方法示例
Mar 01 Javascript
小程序实现上下移动切换位置
Sep 23 Javascript
vue分页插件的使用方法
Dec 25 Javascript
js通过canvas生成图片缩略图
Oct 02 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读取ACCESS数据到MYSQL的代码
2011/05/11 PHP
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
2012/01/16 PHP
php截取视频指定帧为图片
2016/05/16 PHP
JavaScript 对话框和状态栏使用说明
2009/10/25 Javascript
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
用jquery实现的模拟QQ邮箱里的收件人选取及其他效果(一)
2011/01/06 Javascript
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
js实现页面转发功能示例代码
2013/08/05 Javascript
JS判断两个时间大小的示例代码
2014/01/28 Javascript
Jquery实现自定义窗口随意的拖拽
2014/03/12 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
2015/04/22 Javascript
纯javascript制作日历控件
2015/07/17 Javascript
jQuery simpleModal插件的使用介绍
2016/08/30 Javascript
JavaScript中boolean类型之三种情景实例代码
2016/11/21 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
JS实现间歇滚动的运动效果实例
2016/12/22 Javascript
AngularJS 霸道的过滤器小结
2017/04/26 Javascript
vue使用Axios做ajax请求详解
2017/06/07 Javascript
深入理解Vuex 模块化(module)
2017/09/26 Javascript
Javacript中自定义的map.js  的方法
2017/11/26 Javascript
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
vue-cli3+typescript初体验小结
2019/02/28 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
python实现计数排序与桶排序实例代码
2019/03/28 Python
Python帮你识破双11的套路
2019/11/11 Python
python实现简单的购物程序代码实例
2020/03/03 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
夜班门卫岗位职责
2013/12/09 职场文书
正规的求职信范文分享
2013/12/11 职场文书
告诉你怎样写创业计划书
2014/01/27 职场文书
《梅兰芳学艺》教学反思
2014/02/24 职场文书
2014年大学生党课心得体会范文
2014/03/29 职场文书
司法工作人员群众路线对照检查材料思想汇报
2014/09/30 职场文书
2016年秋季开学典礼新闻稿
2015/11/25 职场文书
《当代神农氏》教学反思
2016/02/23 职场文书