这段代码的时间复杂度是多少?我知道除了递归部分以外,所有行的时间复杂度都是O(1)。我不确定递归的时间复杂度是多少,我有一种感觉是O(1),因为我们没有比O(1)更糟糕的行,但通常递归的时间复杂度是O(n)。
代码:
public int getSum(int a, int b) {
if (b == 0){
return a;
}
if (a == 0){
return b;
}
int add = a ^ b;
int carry = (a&b) << 1;
return getSum(add, carry);
}
编辑:顺便说一下,这不是作业,而是为了准备面试。
carry==0
确保了位移,使其不会再有更多位可用。这就是所谓的O(1)。 - martijnn2008O(1)
是一种常数复杂度,但在这种情况下@martijnn2008,因为存在一个递归方法,在最后并不总是被调用!我认为它是线性复杂度O(n)
!例如1次调用:1秒 10次:10秒等等。 - Yahya