关于阶乘的递归算法

2018-12-19  本文已影响0人  fuheideMayuyu

方法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()
    }
  })()
}
上一篇 下一篇

猜你喜欢

热点阅读