我在python中有以下代码:
def mystery(n):
if n <= 50 :
for i in range(n) :
for j in range(n) :
print i*j
else :
mystery(n-1)
对于以下嵌套for循环:
for i in range(n) :
for j in range(n) :
对于i
中的每个n
,j
遍历n
次i
次。复杂性不应该O(n^2)
吗?但是,我的同伴告诉我它不是,有人可以解释为什么吗?
答案 0 :(得分:6)
这些循环仅在n <= 50
时执行,所以它们只是对一个非常重要但不变的工作量的简明描述。最多执行2500 print
个语句。像任何常数一样,2500与渐近复杂性无关。只有极限中的行为(即n无限制地增长)才是重要的。
对于较大的n,函数只是从n向下递减到50.该部分需要O(n)时间,因此整个mystery
的时间复杂度是线性的。