时间复杂度:if / else在for循环下

时间:2020-06-08 17:34:33

标签: python algorithm time-complexity big-o complexity-theory

如果在以下情况下(for循环下的if / else语句),时间复杂度将为O(n)或O(n ^ 2):

def power_dic (n,k)
    if (k=0):
        return 1
    elif (k mod 2 = 0):
        return power(n*n, k/2)
    else
        return n*power_dic(n, k-1)

上面的代码计算n ^ k。

1 个答案:

答案 0 :(得分:2)

在这种情况下,您需要分析代码的整体行为。每个return语句将被调用多少次,然后与输入之间的关系。


在此特定示例中:

时间复杂度为O(logk)(假设所有int乘法均为O(1))。

每次调用return power(n*n, k/2)时,return n*power_dic(n, k-1)最多被调用一次(1)

此外,return power(n*n, k/2)被调用O(logk)次,因为每次调用都会将其减少一半。

这意味着您的总复杂度为2*logn,即O(logk)


(1)也许最后一位叫power_dic(n,1),但那一次不会改变答案。