我正在尝试设置一个大小为10000的整数数组。
但是,如果数组a
的长度小于1995,则Code可以很好地工作。
如果将其更改为2000或更多,程序将停止工作。
如果我设置大小为10000的数组a
,我希望此代码能够工作。
这是Python代码:
import random
random.seed()
a = [random.randint(-1000, 1000) for i in range(10000)]
DP = [[] for i in a]
seq = []
def solveDP(i):
global DP
if i >= len(a):
return []
if len(DP[i]) > 0:
return DP[i]
arr1 = [a[i]] + solveDP(i + 2)
arr2 = solveDP(i + 1)
if sum(arr1) > sum(arr2):
DP[i] = arr1[:] # Copy arr1 into DP[i]
else:
DP[i] = arr2[:] # Copy arr2 into DP[i]
return DP[i]
print(solveDP(0))
答案 0 :(得分:2)
问题不是数组长度是solveDP
的递归调用。我试用了您的代码,大约在5980时收到以下错误消息:
跟踪(最近一次通话最近):文件“ C:\ Users \ alexz \ OneDrive \ Programe \ Python \ PythonApplication1 \ PythonApplication1 \ PythonApplication1.py”, 第13行,在solveDP中 arr1 = [a [i]] + resolveDP(i + 2)文件“ C:\ Users \ alexz \ OneDrive \ Programe \ Python \ PythonApplication1 \ PythonApplication1 \ PythonApplication1.py”, 第13行,在solveDP中 arr1 = [a [i]] + resolveDP(i + 2)文件“ C:\ Users \ alexz \ OneDrive \ Programe \ Python \ PythonApplication1 \ PythonApplication1 \ PythonApplication1.py”, 第13行,在solveDP中 arr1 = [a [i]] + resolveDP(i + 2)[上一行重复995次以上]文件 “ C:\ Users \ alexz \ OneDrive \ Programe \ Python \ PythonApplication1 \ PythonApplication1 \ PythonApplication1.py”, 第7行,在solveDP中 defsolveDP(i):文件“ e:\ microsoft visual studio 2019 \ community \ common7 \ ide \ extensions \ microsoft \ python \ core \ Packages \ ptvsd_vendored \ pydevd_pydevd_bundle \ pydevd_trace_dispatch_regular.py”, 第343行,在致电中 is_stepping = pydev_step_cmd!= -1 RecursionError:在比较中超过了最大递归深度
黑体字使我进行了搜索,发现this source。根据答案,
这是防止堆栈溢出的保护措施。
在我看来,您多次递归调用函数,以至于填满了计算机的堆栈。