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 XML实现两级级联下拉列表
Nov 10 Javascript
jQuery 各种浏览器下获得日期区别
Dec 22 Javascript
javascript实现的距离现在多长时间后的一个格式化的日期
Oct 29 Javascript
基于jquery的超简单上下翻
Apr 20 Javascript
JavaScript对象之间的转换 jQuery对象和原声DOM
Mar 07 Javascript
jquery 操作iframe的几种方法总结
Dec 13 Javascript
JS使用parseInt解析数字实现求和的方法
Aug 05 Javascript
js显示当前日期时间和星期几
Oct 22 Javascript
EasyUI折叠表格层次显示detailview详解及实例
Dec 28 Javascript
使用vue-cli创建项目的图文教程(新手入门篇)
May 02 Javascript
微信小程序实现蒙版弹出窗功能
Sep 17 Javascript
node使用mysql获取数据库数据中文乱码问题的解决
Dec 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 函数学习简单小结
2010/07/08 PHP
用来解析.htpasswd文件的PHP类
2012/09/05 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
浅谈Laravel模板实体转义带来的坑
2019/10/22 PHP
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
javascript options属性集合操作代码
2009/12/28 Javascript
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
最原始的jQuery注册验证方式
2016/10/11 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
解决vuex数据页面刷新后初始化操作
2020/07/26 Javascript
vue cli 3.0通用打包配置代码,不分一二级目录
2020/09/02 Javascript
Python continue语句用法实例
2014/03/11 Python
Python的面向对象思想分析
2015/01/14 Python
Django查询数据库的性能优化示例代码
2017/09/24 Python
python数字图像处理之高级滤波代码详解
2017/11/23 Python
Django实战之用户认证(初始配置)
2018/07/16 Python
Python的iOS自动化打包实例代码
2018/11/22 Python
Flask框架模板渲染操作简单示例
2019/07/31 Python
python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例
2020/02/28 Python
django 装饰器 检测登录状态操作
2020/07/02 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
python 装饰器重要在哪
2021/02/14 Python
Html5移动端获奖无缝滚动动画实现示例
2018/06/25 HTML / CSS
canvas实现图片马赛克的示例代码
2018/03/26 HTML / CSS
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
布里斯班女装时尚品牌:Adrift
2017/12/28 全球购物
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
寒假家长评语大全
2014/04/16 职场文书
学期评语大全
2014/04/30 职场文书
技术员岗位职责
2015/02/04 职场文书
辞职信如何写
2015/02/27 职场文书
解决Mysql多行子查询的使用及空值问题
2022/01/22 MySQL