如果将大于1995的数组传递给Array,Python程序将停止工作

时间:2019-05-07 06:26:11

标签: python arraylist

我正在尝试设置一个大小为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))

1 个答案:

答案 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。根据答案,

  

这是防止堆栈溢出的保护措施。

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