Python 递归函数内存使用

Python 递归函数内存使用,python,memory,recursion,Python,Memory,Recursion,这里有一个递归函数: def pow(x, n): if n == 0: return 1 else: return x * pow(x, n-1) answer = pow(a, b) 和一个迭代: def pow(x, n): # n != 0 answer = x while n > 1: answer *= x n -= 1 return answer answer = pow(a

这里有一个递归函数:

def pow(x, n):
    if n == 0:
       return 1
    else:
       return x * pow(x, n-1)
answer = pow(a, b)
和一个迭代:

def pow(x, n): # n != 0
    answer = x
    while n > 1:
        answer *= x
        n -= 1
    return answer
answer = pow(a, b)
我想知道它们中的哪一个使用了更多的内存。我认为递归使用了更多内存,因为它可以为每个函数调用传递“变量”。如果这是正确的,什么是形式主义来解释这一点?有没有一种好方法可以在代码中跟踪内存使用情况



我认为这不是复制品。主要问题不是跟踪内存使用情况,而是递归内存使用情况。

这里不需要形式主义

Python堆栈帧是巨大的

递归代码使用的内存要多得多

典型的CPython堆栈帧超过50个元素加上局部变量,以x86_64体系结构为例,几乎是500字节

In [1]: import inspect

In [2]: inspect.stack()[1][0]
Out[2]: <frame at 0x7fed81c86850>

In [3]: inspect.stack()[1][0].__sizeof__()
Out[3]: 472
[1]中的
:导入检查
[2]中:inspect.stack()[1][0]
出[2]:
在[3]中:inspect.stack()[1][0]。\uuuu sizeof\uuuuu()
Out[3]:472

关于框架内容的好帖子:

你试过使用内存分析器吗?我读过关于Guppy PE的文章,但我不太了解如何使用它。你的迭代解决方案不正确。这是真的!修复…我也想知道递归的事情,我不认为它是重复的。