Javascript 阶乘计算是否有任何优化?

Javascript 阶乘计算是否有任何优化?,javascript,complexity-theory,Javascript,Complexity Theory,迭代和递归版本都以线性时间复杂度运行。是否可以进行任何优化 // O(n) function factorial (n) { let ret = 1; for(let i = 2; i <= n; i++) { ret = ret * i; } return ret; } // O(n) function factorialR (n) { if( n === 0 || n === 1 ) { return 1; } else { retur

迭代和递归版本都以线性时间复杂度运行。是否可以进行任何优化

// O(n)
function factorial (n) {
  let ret = 1;
  for(let i = 2; i <= n; i++) {
    ret = ret * i;
  }
  return ret;
}

// O(n)
function factorialR (n) {
  if( n === 0 || n === 1 ) {
    return 1;
  } else {
    return n * factorialR(n - 1);
  }
}

是的,有很多方法可以做到 看看这个:


可能需要位操作,在高级语言中并不鼓励,但除非你在做研究,否则面试官可能会想测试你的思维方式

对于初学者来说,显示迭代和递归版本以及对大O的解释应该足够了

如果要求进行优化,请使用用例进行验证,并在适用的情况下提出备忘录建议


如果被要求在没有回忆录的情况下进行优化,那么就跳鸡舞。

在面试环境中,如果面试官说要加快,而你无法访问该链接,你认为下一步会是什么?关键是你只知道定义。关于阶乘和如何编码,你必须弄清楚…将所有的解存储在一个数组中,你可以不断地这样做time@j.a.除非面试是为了一个对数学要求很高的职位,或者是一个完全依赖于你把所有这些都牢记在心的职位,我建议你的答案是:我会研究并实施一种更有效的行为,我只是不知道它现在是什么。或者类似的东西。我们不知道,也可能不应该知道高度具体问题的所有答案。有人做了这项研究,所以我们可以参考他们的工作。有些面试官会督促你去尝试和完善一些你不知道的东西,我只能说他们错了。