Big o 具有不同复杂度分支的递归算法的时间复杂度

Big o 具有不同复杂度分支的递归算法的时间复杂度,big-o,time-complexity,Big O,Time Complexity,我有算法 def alg(a): if a == 0: return 1 elif a % 2 == 1: return alg(a - 1) else: return alg(a / 2) 我不确定它的复杂性是什么。一个分支的复杂度为O(N),另一个分支的复杂度为O(log(N)) 在这种情况下,你是说算法的复杂度是O(N),因为这是最糟糕的情况,还是复杂度在这种情况下完全不同?你通常会耸耸肩说:“是的,这个分支有O(x

我有算法

def alg(a):
    if a == 0:
        return 1
    elif a % 2 == 1:
        return alg(a - 1)
    else:
        return alg(a / 2)
我不确定它的复杂性是什么。一个分支的复杂度为O(N),另一个分支的复杂度为O(log(N))


在这种情况下,你是说算法的复杂度是O(N),因为这是最糟糕的情况,还是复杂度在这种情况下完全不同?

你通常会耸耸肩说:“是的,这个分支有O(x),所以它至少有那么糟糕。”

但是如果我们稍微聪明一点,我们可以看到你的算法有一个基本情况是O(1),然后是另外两种情况:偶数和奇数

即使是偶数,问题的规模也会减少一半

如果为奇数,则问题大小在被切成两半之前减小1(由于减小1)

最坏的情况是,在每个偶数减半后都是奇数,但这仍然很好,因为这会减少到
O(log(n))