为什么Python会在第10行抛出一个RecursionError但不会在第13行抛出?
def fib(n, a = [0,1]):
if len(a) > n:
return a[n]
a.append(fib(n - 1, a) + fib(n - 2, a))
return a[n]
def main():
x = 998
print(fib(x)) # RecursionError
for i in range(1000):
print(fib(i)) # No Error
main()
答案 0 :(得分:0)
进一步研究一下,看起来python之前提到的可变默认参数处理实际上就是这背后的原因。每次调用函数时,都不会创建新列表,而是在定义函数时创建一个列表。
这是一个利用此功能的函数,因此调用fib(998)不会抛出RecursionError:
def fib(n, a = [0,1]):
if len(a) > n:
return a[n]
while len(a) <= n:
a.append(fib(len(a) - 1) + fib(len(a) - 2))
return a[n]