关于阶乘的递归算法

方法1:

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

这种方法虽然可以实现阶乘,但是有一个缺点就是耦合度太高,函数名称不可改变。
方法2:

function factorial(num){
  if(num<=1){
    return 1
  } else {
    return num*arguments.callee(num-1)
  }
}

对于函数进行解耦,函数名无论怎么变都不影响函数功能的实现,但是这种方法也有一个问题就是访问arguments的操作,因为它是一个很大的对象,每次递归时都需要重新创建,对于浏览器性能影响较大,还会影响闭包,所以我们进一步优化。

方法3:

function factorial(num){
  if(num<=1){
    return 1
  }
  let res = 1
  return (function fn(){
    res*=num
    num--
    if(num!=0){
      fn()
    }
  })()
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 4,661评论 0 5
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,162评论 0 21
  • 前面的话 函数是所有编程语言的重要组成部分,在ES6出现前,JS的函数语法一直没有太大的变化,从而遗留了很多问题,...
    CodeMT阅读 837评论 0 1
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,270评论 0 4
  • 今天这篇文章写于第六天的早上,因为昨天的我被小葵叫出去吃饭,很晚才回家。这份外出的计划打乱了我平常的作息,...
    AnnabellaNing阅读 175评论 0 0