列表中包含递归函数对内存/资源的影响

时间:2018-04-08 19:00:41

标签: python python-3.x recursion memory resources

我是Python新手,我计划在递归函数中添加一个列表,例如

def myRecursion(a):

    A = [0,1,2]    

    #Rest of code here
    myRecursion(a-1)

我的问题是在递归中有A 创建它的许多实例并占用我的资源?我还应该注意,列表的内容始终相同

1 个答案:

答案 0 :(得分:1)

使用一些示例时序的简单答案:是的,在递归函数内部创建列表会对性能产生影响,而不是在递归函数之外创建并传递它。

In [1]: def recursion1(n):
   ...:     A = [1,2,3]
   ...:     return n if n == 0 else recursion1(n-1)
   ...:

In [2]: %timeit recursion1(1000)
232 µs ± 7.84 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [3]: def recursion2(n, A):
   ...:     return n if n == 0 else recursion2(n-1, A)
   ...:

In [4]: A = [1,2,3]

In [5]: %timeit recursion2(1000, A)
163 µs ± 681 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
  

我的问题是将在递归内部创建它的许多实例

我们可以使用id()来检查对象的身份:

In [6]: def recursion1(n):
   ...:     A = [1,2,3]
   ...:     print(id(A))
   ...:     return n if n == 0 else recursion1(n-1)
   ...:

In [7]: recursion1(3)
129035280
134141552
129297184
134141472
Out[7]: 0

In [8]: def recursion2(n, A):
   ...:     print(id(A))
   ...:     return n if n == 0 else recursion2(n-1, A)
   ...:

In [9]: recursion2(3, A)
133702400
133702400
133702400
133702400
Out[9]: 0