void foo(float[] array, int start, int end){
if((end-start) <=1) return;
int x = (end-start)/5;
int y = 2*x;
int z = 4*x;
foo(array,start,start+y);
for(index = y; index < z; index++){
array[index]++;
}
foo(array, start+z, end);
}
我得到的for循环的初始化被执行N + 1次,而内部码被执行N次,则意味着时间复杂度将是O((N +1)*(N))= O(n^2)。但是在这种情况下如何计算N?我该如何处理递归调用?我怎样才能将这些信息转换成Big O符号?计算运行程序的时间(大O符号)
请不要说这是一个重复的问题。我明白,其他例子也存在类似的问题,但这个例子对我来说是抽象的,学习如何解决这个问题会在很多其他情况下帮助我。
O(N + 1(N))≠O(N 2)。 O(N + N)= O(2N)= O(N)(因为在Big-O表示法中我们通常忽略常量)。 –
'x','y'和'z'在您的代码注释中不是常量。它们来自'n = end-start'。 – Trenin
但是他们的最坏情况计算时间是不变的。 –