递归函数内存usag

2024-06-26 00:11:35 发布

您现在位置:Python中文网/ 问答频道 /正文

这里有一个递归函数:

def pow(x, n):
    if n == 0:
       return 1
    else:
       return x * pow(x, n-1)
answer = pow(a, b)

以及一个迭代:

^{pr2}$

我想知道哪一个使用更多的内存。我认为递归使用更多内存,因为它会为每个函数调用传递“variables”。如果这是对的,什么是形式主义来解释这一点?有没有一种很好的方法来跟踪代码内部的内存使用情况?在


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


Tags: 方法内存代码answerreturnifdef情况
1条回答
网友
1楼 · 发布于 2024-06-26 00:11:35

这里不需要形式主义。在

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

关于框架内容的好帖子:http://tech.blog.aknin.name/2010/07/22/pythons-innards-interpreter-stacks/

相关问题 更多 >