简单的时间复杂性问题

时间:2015-03-30 15:31:13

标签: java time-complexity

我需要知道这两段代码的复杂性。

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)。

我说错了吗?

1 个答案:

答案 0 :(得分:3)

如果看一下Sum(),当输入改变时,循环次数会如何变化?无论输入如何,Sum()仅执行1次计算。换句话说 - 无论输入如何,执行时间都是恒定的。因此你有O(1)。

RecSum()调用自身。次数取决于y,x之间的差异。因此,如果差异加倍,执行时间会翻倍。所以你有O(n)

也许这也很有用i want to calculate the T(n) for the two algorithms