JS的递归实现方法

这次给大家带来,的注意事项有哪些,下面就是实战案例,一起来看一下。

递归函数:递归函数是在通过名字调用自身的情况下构成的。

递归实现阶乘函数:

方法一:通过使用函数的名字

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

登录后复制

结果为:24;

但是这种方法实现递归有一个问题,观察以下代码:

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

登录后复制

结果为:24;

但是:

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

登录后复制

结果为:报错

这是因为:

我们定义的函数名,其实是指向函数的一个指针,定义的anotherFactorial 也指向了那个函数,所以调用anotherFactorial (4)可以成功的输出24

当 factorial = null时,执行定义函数的引用就剩下了anotherFactorial,那么在调用anotherFactorial(4)就会显示以上的错误的信息。

此时可以使用arguments.callee来替代函数定义中的 factorial。

方法二:通过使用arguments.callee

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

登录后复制

结果为:24

arguments.callee是一个指向正在执行的函数的指针,因此可以用arguments.callee来实现对函数的递归调用。通过使用arguments.callee来代替函数名,可以保证在调用函数时无论怎样都不会出现问题。因此,在编写递归函数时,使用argumnts.callee总比使用函数名更加保险。
但是,在严格模式下,不能通过脚本访问arguments.callee,访问这个属性会报错,不过可以通过命名函数表达式来达到相同的效果。

方法三:通过命名函数表达式

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

登录后复制

这种方式在严格和非严格模式下都有效。

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

以上就是JS的递归实现方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2771169.html

(0)
上一篇 2025年3月8日 12:51:24
下一篇 2025年3月8日 12:51:37

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JS+canvas绘制饼状统计图

    这次给大家带来JS+canvas绘制饼状统计图,JS+canvas绘制饼状统计图的注意事项有哪些,下面就是实战案例,一起来看一下。 完整代码: www.jb51.net canvas饼状图 var colors = (function ()…

    编程技术 2025年3月8日
    200
  • JS实现动态雪花飘落

    这次给大家带来JS实现动态雪花飘落,JS实现动态雪花飘落的注意事项有哪些,下面就是实战案例,一起来看一下。 飘雪 *{ margin:0; padding:0; font-family:”微软雅黑”; font-size:13px; col…

    编程技术 2025年3月8日
    200
  • JS二叉搜索树使用详解

    这次给大家带来JS二叉搜索树使用详解,JS二叉搜索树使用的注意事项有哪些,下面就是实战案例,一起来看一下。 什么是二叉树 二叉树就是树的每个节点最多只能有两个子节点 什么是二叉搜索树 二叉搜索树在二叉树的基础上,多了一个条件,就是二叉树在插…

    编程技术 2025年3月8日
    200
  • Node.js中如何操作mongodb数据库

    这次给大家带来Node.js中如何操作Node.js数据库,Node.js中操作mongodb数据库的Node.js有哪些,下面就是实战案例,一起来看一下。 如何利用mongoose将数据写入mongodb数据库? 1.利用npm下载安装m…

    编程技术 2025年3月8日
    200
  • JS实现路由跳转步奏详解

    这次给大家带来JS实现路由跳转步奏详解,JS实现路由跳转的注意事项有哪些,下面就是实战案例,一起来看一下。 JS的是使用对很多人来说是非常频繁的,同时js也有着非常强大的制作效果。这次文章就给大家介绍下使用js实现路由跳转效果示例代码,希望…

    编程技术 2025年3月8日
    200
  • js实现标签点击切换代码(附代码)

    这次给大家带来js实现标签点击切换代码(附代码) ,js实现标签点击切换代码的注意事项有哪些,下面就是实战案例,一起来看一下。 对于网站而言,相信很多人也非常清楚,网站里面很多的标签,每每点击之后就会切换了。那么大家知道这种效果是怎么实现的…

    编程技术 2025年3月8日
    200
  • JS制作九九乘法表的方法

    这次给大家带来JS制作九九乘法表的方法,JS制作九九乘法表的注意事项有哪些,下面就是实战案例,一起来看一下。 废话不多说了,直接给大家贴代码了,具体代码如下所示: 99乘法表 for (var i = 1; i <= 9; i++) …

    编程技术 2025年3月8日
    200
  • JS操作前端缓存

    这次给大家带来JS操作前端缓存,JS操作前端缓存的注意事项有哪些,下面就是实战案例,一起来看一下。 在前端浏览器中,有些数据(比如数据字典中的数据),可以在第一次请求的时候全部拿过来保存在js对象中,以后需要的时候就不用每次都去请求服务器了…

    编程技术 2025年3月8日
    200
  • js使用正则进行密码强度验证

    这次给大家带来js使用正则进行密码强度验证,js使用正则进行密码强度验证的注意事项有哪些,下面就是实战案例,一起来看一下。 具体代码如下: 密码强度验证 body { background: #ccc; } label { width: 4…

    编程技术 2025年3月8日
    200
  • js怎么封装Canvas成插件

    这次给大家带来js怎么封装Canvas成插件,js封装Canvas成插件的注意事项有哪些,下面就是实战案例,一起来看一下。 之前就说过,我想写一个canvas画统计图的插件,现在写好了 先说下实现的功能吧:   1.可以通过自定义X轴坐标属…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论