python中这个阶乘函数的空间复杂度应该是多少?
def fact(n):
product = 1
for i in range(2, n+1):
product = product * i
return product
在像C这样的其他语言中,这个想法会导致O(1)空间复杂度,但是对于这个例子,范围(2,n + 1)会导致O(n)空间复杂度的空间复杂度吗?
答案 0 :(得分:1)
在py2.x range
中返回一个列表,因此你的for循环实际上是在迭代该列表。因此,就记忆而言,它是O(N)
。
您可以在此使用xrange
,一次返回一项。
xrange
的帮助:
xrange(start, stop[, step]) -> xrange object
Like range(), but instead of returning a list, returns an object that
generates the numbers in the range on demand. For looping, this is
slightly faster than range() and more memory efficient.
答案 1 :(得分:0)
它还取决于您使用的是哪个python。
在python 3中,range是一个生成器,就像python 2中的旧xrange一样。
如果您使用的是python 2,那么它将是O(n)。