我使用递归定义了以下阶乘函数:
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]
为什么会出现这种情况?字典和集合推导式也会发生这种情况。
推导式是否在后台调用某个函数,该函数占用了堆栈中的一个槽?理解的内部实现如何解释这一点?
Для того чтобы понять список чисел в строке кода должен присутствовать модуль 数学 вам даже не следует делать вычисления по числам всё это будет работать автоматически если можно так сказать