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操作Select 简单方便 一个js插件搞定
Nov 12 Javascript
在Ajax中使用Flash实现跨域数据读取的实现方法
Dec 02 Javascript
javascript代码运行不出来执行错误的可能情况整理
Oct 18 Javascript
关于JavaScript中name的意义冲突示例介绍
May 29 Javascript
jQuery多项选项卡的实现思路附样式及代码
Jun 03 Javascript
详解JavaScript函数
Dec 01 Javascript
JavaScript的ExtJS框架中表格的编写教程
May 21 Javascript
深入理解jquery自定义动画animate()
May 24 Javascript
JSON字符串和对象相互转换实例分析
Jun 16 Javascript
JS本地刷新返回上一页代码
Jul 25 Javascript
angular select 默认值设置方法
Jun 23 Javascript
ant design vue 表格table 默认勾选几项的操作
Oct 31 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
linux下使用crontab实现定时PHP计划任务失败的原因分析
2014/07/05 PHP
2014最热门的24个php类库汇总
2014/12/18 PHP
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
CI框架附属类用法分析
2018/12/26 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
2019/10/15 PHP
用javascript编写的第一人称射击游戏
2007/02/25 Javascript
JS 动态加载脚本的4种方法
2009/05/05 Javascript
JQuery Tips(3) 关于$()包装集内元素的改变
2009/12/14 Javascript
js 模拟气泡屏保效果代码
2010/07/10 Javascript
上传的js验证(图片/文件的扩展名)
2013/04/25 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
2014/04/11 Javascript
nodejs简单实现中英文翻译
2015/05/04 NodeJs
JavaScript的React框架中的JSX语法学习入门教程
2016/03/05 Javascript
js判断某个字符出现的次数的简单实例
2016/06/03 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
jquery获取easyui日期控件的值实现方法
2016/11/09 Javascript
Nodejs 搭建简单的Web服务器详解及实例
2016/11/30 NodeJs
浅谈js算法和流程控制
2016/12/29 Javascript
Vue中fragment.js使用方法详解
2017/03/09 Javascript
JavaScript实现三级联动菜单实例代码
2017/06/26 Javascript
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
JS使用栈判断给定字符串是否是回文算法示例
2019/03/04 Javascript
Vue3.0中的monorepo管理模式的实现
2019/10/14 Javascript
Python标准库defaultdict模块使用示例
2015/04/28 Python
Python中的条件判断语句与循环语句用法小结
2016/03/21 Python
windows下python虚拟环境virtualenv安装和使用详解
2019/07/16 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
2019/11/26 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
2020/02/23 Python
美国Rue La La闪购网站:奢侈品、中高档品牌限时折扣
2016/10/19 全球购物
中软Java笔试题
2012/11/11 面试题
外企办公室竞聘演讲稿
2013/12/29 职场文书
写给老师的表扬信
2014/01/21 职场文书
李开复演讲稿
2014/05/24 职场文书
教你利用Selenium+python自动化来解决pip使用异常
2021/05/20 Python
js中Object.create实例用法详解
2021/10/05 Javascript
SQL Server中搜索特定的对象
2022/05/25 SQL Server