这些函数的运行时间是多少?

What is the running time of these functions?

运行时间是几点?

def a(n):
    if n % 2 == 0:
        return n
    else:
        return a(n/2)

我猜T(n) = T(n/2) + 1,然后用主定理。


这个功能怎么样:

def b(n):
    for i in range(n):
        print(a(i))

这是我的猜测。

T(n) = nT(n/2) + 1

第一个是 O(logN) 第二个是 O(NlogN)。

1) 您每次迭代都将问题减少了一半。所以你迭代的总次数是:

i 使得 2**i = N,在数学中 i = logN 以 2 为底。O(logN)

2) 您正在遍历大小为 N 的整个列表,因此 O(N) 但您在每次迭代时都调用了 logN 函数。所以我们调用了一个 logN 函数 N 次。这是 O(NlogN)。