我正在尝试设置一个整数数组,其大小为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。根据答案,


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


在我看来,您多次递归调用函数,以至于填满了计算机的堆栈。

08-16 16:18