假设我们有两种方法:
void example(int p){
p += 10;
p = exampleTwo(p);
}
int exampleTwo(int p){
int pp = 0;
for(int i = 0; i < p; i++){
pp++;
}
return pp;
}
方法exampleTwo
具有线性运行时。它的运行时间是O(n)。
那么,方法example
的大O符号是什么,考虑到它调用exampleTwo
?
我想它也是O(n),但我不确定。
答案 0 :(得分:5)
对于子程序,您应该将顺序乘以其调用次数的顺序。例如,如果函数被称为O(n)次,并且在O(log n)时间内运行,则总顺序为O(n log n)。
答案 1 :(得分:3)
example()
没有循环,它对exampleTwo()
没有任何额外作用,因此它具有相同的复杂度顺序,即O(n)
,为exampleTwo()
。
如果example()
更改为:
int example(int p){
int sum = 0;
for(int i=0; i<p; ++i){
sum += exampleTwo(p);
}
return sum;
}
然后复杂性现在为O(n²)
:随着p
越大,要做的工作量会增加p
的平方。