我用递归定义了下面的阶乘函数:
def factorial(n):
if n == 0:
return n
else:
return n*factorial(n-1)
然后,我定义了下面的函数来返回调用factorial
函数时引发RecursionError的最小值.(我已经为此导入了sys
模块)
def test_recursion(n):
sys.setrecursionlimit(n)
num = 0
while True:
try:
x = factorial(num)
num += 1
except:
return num
我知道这个函数有点误导,因为调用test_recursion
函数本身占用了调用堆栈中的一个插槽.
现在,如果我创建列表l1
如下:
l1 = []
for i in [10,11,12]:
l1.append(test_recursion(i))
l2
被认为是等价的列表,通过使用列表理解
l2 = [test_recursion(i) for i in [10,11,12]]
现在,print(l1, l2, sep = "\n"
给出以下输出:
[7,8,9]
[6,7,8]
为什么会发生这种情况?字典和集合解释也会发生这种情况.
是不是理解在后台调用某个函数,占用了堆栈中的一个插槽?理解的内在实现如何解释这一点?