javascript - 阶乘计算的大 O(时间复杂度)是多少?

标签 javascript time-complexity big-o

迭代版本是线性的:

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

对于递归版本,它似乎也是线性的:
function factorialR (n) {
  if( n === 0 || n === 1 ) {
    return 1;
  } else {
    return n * factorialR(n - 1);
  }
}

递归版本也是线性的吗?而不是每个附加值的循环,它只是一个附加的函数调用。

最佳答案

你的两个函数都有 O(n)在时间复杂度上。

第一个很简单。

第二个调用递归函数一次在每次迭代中,所以,它是 O(n)以及。

关于javascript - 阶乘计算的大 O(时间复杂度)是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60079515/

相关文章:

algorithm - 这个算法会在 O(n) 内运行吗?

javascript - 如何使用 nextUntil() 和 not() 修复 jQuery 子菜单 Accordion ?

javascript - 我们真的必须改成 Object.create 吗?

c# - 牛顿法平方根迭代

java - 以下程序的时间复杂度是多少?

python - Python中函数查找操作的时间复杂度是多少

javascript - 这个算法的时间和空间复杂度是O(n)还是O(1)?

javascript - 这里的回调是如何触发的?

javascript - 使用 Webpack 缩小 jQuery 文件并将引用更新为 HTML?

python - Python 中列表与树的递归应用