如果在以下情况下(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。
答案 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)
,但那一次不会改变答案。