简单的时间复杂度问题

Simple time-complexity problems

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

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;    
}

我认为 Sum 是 O(n^2),RecSum 是 O(n)。

我说得对吗?

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

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

也许这也有用