我需要知道这两段代码的复杂性。
public static int Sum(int x, int y){
return y*(y+1)/2 - (x-1)*x/2;
}
public static int RecSum(int x, int y){
if (x < y+1)
return x + RecSum(x+1, y);
else
return 0;
}
我得到它的总和是O(n ^ 2)而RecSum是O(n)。
我说错了吗?
答案 0 :(得分:3)
如果看一下Sum(),当输入改变时,循环次数会如何变化?无论输入如何,Sum()仅执行1次计算。换句话说 - 无论输入如何,执行时间都是恒定的。因此你有O(1)。
RecSum()调用自身。次数取决于y,x之间的差异。因此,如果差异加倍,执行时间会翻倍。所以你有O(n)