JavaScript递归函数定义与用法实例分析


Posted in Javascript onJanuary 24, 2019

本文实例讲述了JavaScript递归函数定义与用法。分享给大家供大家参考,具体如下:

递归函数是一个函数通过名字调用自身的情况下形成的,比如经典的递归阶乘函数:

function factorial(num) {
  if (num <= 1) {
    return 1;
  } else {
    return num * factorial(num - 1);
  }
}

上面的这种写法,可能会造成问题:

var anotherFactorial = factorial;
factorial = null;
console.log(anotherFactorial(4));//出错

因为 factorial 函数定义内部使用了自身的函数名,所以当 factorial 被置为 null 后,factorial 已不是函数,自然报错啦 O(∩_∩)O~。

可以使用 arguments.callee 指向正在执行的函数的指针来避免上面出现的问题:

function factorial(num) {
  if (num <= 1) {
    return 1;
  } else {
    return num * arguments.callee(num - 1);
  }
}
var anotherFactorial = factorial;
factorial = null;
console.log(anotherFactorial(4));

运行结果:24

但在严格模式下,不能访问 arguments.callee,但可以使用命名函数表达式来实现上述功能:

var factorial = (
    function f(num) {
      if (num <= 1) {
        return 1;
      } else {
        return num * f(num - 1);
      }
    }
);
var anotherFactorial = factorial;
factorial = null;
console.log(anotherFactorial(4));

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
iframe窗口高度自适应的又一个巧妙实现思路
Apr 04 Javascript
Android中的jQuery:AQuery简介
May 06 Javascript
调整小数的格式保留小数点后两位
May 14 Javascript
jQuery操作select下拉框的text值和value值的方法
May 31 Javascript
JavaScript模拟实现继承的方法
Mar 30 Javascript
jQuery简单实现彩色云标签效果示例
Aug 01 Javascript
解决拦截器对ajax请求的拦截实例详解
Dec 21 Javascript
jQuery鼠标移动图片上实现放大效果
Jun 25 jQuery
如何通过非数字与字符的方式实现PHP WebShell详解
Jul 02 Javascript
使用D3.js创建物流地图的示例代码
Jan 27 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
Apr 12 Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
Dec 15 Vue.js
jQuery实现当拉动滚动条到底部加载数据的方法分析
Jan 24 #jQuery
vue结合element-ui使用示例
Jan 24 #Javascript
VUE+Element环境搭建与安装的方法步骤
Jan 24 #Javascript
JS实现带阴历的日历功能详解
Jan 24 #Javascript
微信小程序webview实现长按点击识别二维码功能示例
Jan 24 #Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
Jan 24 #Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变opacity实现)
Jan 24 #Javascript
You might like
桌面中心(三)修改数据库
2006/10/09 PHP
初步介绍PHP扩展开发经验分享
2012/09/06 PHP
php中过滤非法字符的具体实现
2013/10/29 PHP
PHP计算一年多少个星期和每周的开始和结束日期
2014/07/01 PHP
PHP实现获取某个月份周次信息的方法
2015/08/11 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
基于JQuery的日期联动实现代码
2011/02/24 Javascript
扩展JavaScript功能的正确方法(译文)
2012/04/12 Javascript
ANT 压缩(去掉空格/注释)JS文件可提高js运行速度
2013/04/15 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
jQuery中$.each使用详解
2015/01/29 Javascript
使用JavaScript为一张图片设置备选路径的方法
2017/01/04 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
2017/04/13 Javascript
Vue.js递归组件构建树形菜单
2017/12/24 Javascript
vue路由插件之vue-route
2019/06/13 Javascript
JavaScript模块管理的简单实现方式详解
2019/06/15 Javascript
详解nuxt 微信公众号支付遇到的问题与解决
2019/08/26 Javascript
JavaScript相等运算符的九条规则示例详解
2019/10/20 Javascript
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
Python数据库的连接实现方法与注意事项
2016/02/27 Python
Python结巴中文分词工具使用过程中遇到的问题及解决方法
2017/04/15 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
python中二分查找法的实现方法
2020/12/06 Python
购买正版游戏和游戏激活码:Green Man Gaming
2019/11/06 全球购物
写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
2014/09/05 面试题
上海某公司.net方向笔试题
2014/09/14 面试题
公共事业管理本科生求职信
2013/10/07 职场文书
汉语言文学职业规划
2014/02/14 职场文书
细节决定成败演讲稿
2014/05/12 职场文书
房屋分割离婚协议书范本
2014/12/01 职场文书
中国世界遗产导游词
2015/02/13 职场文书
2015年度班主任自我评价
2015/03/11 职场文书
文艺演出主持词
2015/07/01 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书
教你如何用Python实现人脸识别(含源代码)
2021/06/23 Python
MySQL性能指标TPS+QPS+IOPS压测
2022/08/05 MySQL