我正在尝试设置一个整数数组,其大小为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))
最佳答案
问题不在于数组长度是与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。根据答案,
是的,可以防止堆栈溢出。
在我看来,您多次递归调用函数,以至于填满了计算机的堆栈。