1

Pythonでこの階乗関数の空間複雑度はどうあるべきですか?

def fact(n):
    product = 1

    for i in range(2, n+1):
        product = product * i

    return product

C のような他の言語でのこの同じ考え方は、O(1) 空間の複雑さをもたらしますが、この例では、range(2,n+1) は O(n) 空間の複雑さの空間複雑さをもたらしますか?

4

2 に答える 2

1

py2.x ではrangeリストが返されるため、for ループは実際にはそのリストを反復処理しています。したがって、それはO(N)メモリの観点からです。

xrange一度に 1 つのアイテムを返すここで使用できます。

ヘルプ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.
于 2013-06-25T14:38:59.073 に答える