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实现点击链接弹出"图片另存为"而不是直接打开
Aug 15 Javascript
初识Node.js
Mar 20 Javascript
JavaScript实现的Tween算法及缓冲特效实例代码
Nov 03 Javascript
JS组件Bootstrap Table表格行拖拽效果实现代码
Aug 27 Javascript
基于Bootstrap重置输入框内容按钮插件
May 12 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
Aug 23 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
Sep 05 Javascript
利用fecha进行JS日期处理
Nov 21 Javascript
JS 在数组指定位置插入/删除数据的方法
Jan 12 Javascript
解决IE7中使用jQuery动态操作name问题
Aug 28 jQuery
JavaScript对象属性操作实例解析
Feb 04 Javascript
5种 JavaScript 方式实现数组扁平化
Oct 05 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中实现精确设置session过期时间的方法
2014/07/17 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
学习javascript,实现插入排序实现代码
2011/07/31 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
jquery中change()用法实例分析
2015/02/06 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
2015/03/09 Javascript
jQuery判断是否存在滚动条的简单方法
2016/09/17 Javascript
纯JS实现表单验证实例
2016/12/24 Javascript
微信小程序下拉刷新界面的实现
2017/09/28 Javascript
解决Antd Table组件表头不对齐的问题
2020/10/27 Javascript
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
[02:49:21]2019完美盛典全程录像
2019/12/08 DOTA
Python实现简单字典树的方法
2016/04/29 Python
python if not in 多条件判断代码
2016/09/21 Python
python append、extend与insert的区别
2016/10/13 Python
人生苦短我用python python如何快速入门?
2018/03/12 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
python中的colorlog库使用详解
2019/07/05 Python
通过实例解析Python调用json模块
2019/12/11 Python
Django自定义列表 models字段显示方式
2020/04/03 Python
Python自省及反射原理实例详解
2020/07/06 Python
HTML5 Web Workers之网站也能多线程的实现
2013/04/24 HTML / CSS
HTML5离线应用与客户端存储的实现
2018/05/03 HTML / CSS
英国网络托管和域名领导者:Web Hosting UK
2017/10/15 全球购物
Hotels.com拉丁美洲:从豪华酒店到经济型酒店的预定优惠和折扣
2019/12/09 全球购物
初中政治教学反思
2014/01/17 职场文书
2014信息公开实施方案
2014/02/22 职场文书
大学班级文化建设方案
2014/05/06 职场文书
战略合作意向书
2014/07/29 职场文书
反腐倡廉观后感
2015/06/08 职场文书
春季运动会加油词
2015/07/18 职场文书
企业廉洁教育心得体会
2016/01/20 职场文书
学习杨善洲同志先进事迹心得体会
2016/01/23 职场文书
2019年最新借条范本!
2019/07/08 职场文书
sql查询结果列拼接成逗号分隔的字符串方法
2021/05/25 SQL Server