若将大于1995的数组传递给数组a,Python程序将停止工作

若将大于1995的数组传递给数组a,Python程序将停止工作,python,arraylist,Python,Arraylist,我试图设置一个整数数组,其大小为10000 但是,如果数组a的长度小于1995,则代码工作得很好。 如果我将其更改为2000或更多,程序将停止工作 如果我将数组a的大小设置为10000,我希望此代码能够工作。 以下是Python代码: 随机导入 random.seed() a=[random.randint(-10001000)表示范围(10000)内的i] DP=[]表示a中的i] seq=[] 第1(i)段: 全球DP 如果i>=len(a): 返回[] 如果len(DP[i])>0: 返回

我试图设置一个整数数组,其大小为10000

但是,如果数组a的长度小于1995,则代码工作得很好。 如果我将其更改为2000或更多,程序将停止工作

如果我将数组
a
的大小设置为10000,我希望此代码能够工作。 以下是Python代码:

随机导入
random.seed()
a=[random.randint(-10001000)表示范围(10000)内的i]
DP=[]表示a中的i]
seq=[]
第1(i)段:
全球DP
如果i>=len(a):
返回[]
如果len(DP[i])>0:
返回DP[i]
arr1=[a[i]]+solveDP(i+2)
arr2=solveDP(i+1)
如果总和(arr1)>总和(arr2):
DP[i]=arr1[:]#将arr1复制到DP[i]
其他:
DP[i]=arr2[:]#将arr2复制到DP[i]
返回DP[i]
打印(DP(0))

问题不在于数组长度,而在于递归调用
solveDP
。我使用了您的代码,大约在5980时,我收到以下错误消息:

回溯(最近一次调用):文件“C:\Users\alexz\OneDrive\Programe\Python\PythonApplication1\PythonApplication1\PythonApplication1.py”, 第13行,在DP中 arr1=[a[i]]+solveDP(i+2)文件“C:\Users\alexz\OneDrive\Programe\Python\PythonApplication1\PythonApplication1\PythonApplication1.py”, 第13行,在DP中 arr1=[a[i]]+solveDP(i+2)文件“C:\Users\alexz\OneDrive\Programe\Python\PythonApplication1\PythonApplication1\PythonApplication1.py”, 第13行,在DP中 arr1=[a[i]]+solveDP(i+2)[上一行重复995次]文件 “C:\Users\alexz\OneDrive\Programe\Python\PythonApplication1\PythonApplication1\PythonApplication1.py”, 第7行,在solveDP中 def solveDP(i):文件“e:\microsoft visual studio 2019\community\common7\ide\extensions\microsoft\python\core\Packages\ptvsd\u vendored\pydevd\u pydevd\u bundle\pydevd\u trace\u dispatch\u regular.py”, 第343行,在调用中 是步进=pydev\u步进\u cmd!=-1递归错误:比较中超过了最大递归深度

粗线条让我搜索了一下,我找到了。根据答案,

是的,它可以防止堆栈溢出


在我看来,你递归调用一个函数的次数太多,以至于填满了机器的堆栈。

你说的停止工作到底是什么意思,它会抛出错误吗?或者你不再得到你想要的输出了?我自己也没有试过,但这看起来是对的。不幸的是,Python不支持尾部调用优化,因此您必须找到另一个实现。感谢您的回复。如果您提供一个与我的代码相关的示例代码,那将非常有帮助。如果您只想生成一个包含10000个随机元素的数组,那么我认为递归是一种过度使用