以下代码的时间复杂度是多少?(javascript)

以下代码的时间复杂度是多少?(javascript),javascript,algorithm,time-complexity,big-o,anagram,Javascript,Algorithm,Time Complexity,Big O,Anagram,有人能解释一下下面代码的时间和空间复杂性,并告诉我数学公式吗 let genAnagrams = (word, anagram = '', results = []) => { if (!word) { results.push(anagram); return; } for (let i = 0; i < word.length; i++) { genAnagrams(word.slice(0, i) + word.slice(i + 1), a

有人能解释一下下面代码的时间和空间复杂性,并告诉我数学公式吗

let genAnagrams = (word, anagram = '', results = []) => {
  if (!word) {
    results.push(anagram);
    return;
  }
  for (let i = 0; i < word.length; i++) {
    genAnagrams(word.slice(0, i) + word.slice(i + 1), anagram + word[i], results);
  }
  return [...new Set(results)];
};
让genAnagrams=(单词、字谜=“”,结果=[])=>{
如果(!word){
结果:推(字谜);
返回;
}
for(设i=0;i
我知道slice在每次迭代中都会增加一个线性时间复杂度,那么这会是二次的吗?
这是O(n!*(n-1)?还是O(n!)?还是O(n*n!)?

您尝试过解决这个问题吗?除了一些疯狂的猜测,我看不出有任何尝试。我已经尝试解决了这个问题。在我看来,给定一个长度为n的单词,我们将循环遍历这个单词,时间复杂度将为n,乘以(n-1)进行切片,再加上递归,它将是(n-1)*(n-2+(n-3)(n-3…)等等。因此,如果我计算出数学,它将类似于:n(n-1)+n(n-1)(n-2)+n(n-1)(n-3)…我不太清楚这到底是什么原因。