【发布时间】:2017-02-12 22:30:12
【问题描述】:
如果之前已经回答过,我提前道歉。
我了解以下代码的时间复杂度为O(n!):
void permutations(int n){
if(n!=0){
for(int i=0; i<n; i++){
permutations(n-1);
}//for
}//if
}//permutations
我也明白以下代码的时间复杂度是O(2^n):
void permutations(int n){
if(n!=0){
permutations(n-1);
permutations(n-1);
}//if
}//permutations
但是我无法确定以下代码的复杂性,我怀疑它是 O((n^2)*(n!)),但我不确定是否如此是正确的。如果有人能解释我是否正确,以及为什么,我将不胜感激。
void permutations(int n){
if(n!=0){
for(int i=0; i<n; i++){
permutations(n-1);
permutations(n-1);
}//for
}//if
}//permutations
【问题讨论】:
-
你做了什么来尝试解决这个问题?
-
看看递归树:在
O(n!)版本中,每次循环迭代分支一次,现在分支两次...... -
permutations(0)的调用次数为 f(n) = 2n * f(n - 1) = 2^n * n!。如果 n^2 你的意思是 2^n,那么是的,你是对的。
标签: time-complexity big-o