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

标签 python arraylist

我正在尝试设置一个大小为 10000 的整数数组。

但是,如果数组 a 的长度小于 1995,则代码可以正常工作。 如果我将其更改为 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 时,我收到以下错误消息:

Traceback (most recent call last): File "C:\Users\alexz\OneDrive\Programe\Python\PythonApplication1\PythonApplication1\PythonApplication1.py", line 13, in solveDP arr1 = [a[i]] + solveDP(i + 2) File "C:\Users\alexz\OneDrive\Programe\Python\PythonApplication1\PythonApplication1\PythonApplication1.py", line 13, in solveDP arr1 = [a[i]] + solveDP(i + 2) File "C:\Users\alexz\OneDrive\Programe\Python\PythonApplication1\PythonApplication1\PythonApplication1.py", line 13, in solveDP arr1 = [a[i]] + solveDP(i + 2) [Previous line repeated 995 more times] File "C:\Users\alexz\OneDrive\Programe\Python\PythonApplication1\PythonApplication1\PythonApplication1.py", line 7, in solveDP def solveDP(i): File "e:\microsoft visual studio 2019\community\common7\ide\extensions\microsoft\python\core\Packages\ptvsd_vendored\pydevd_pydevd_bundle\pydevd_trace_dispatch_regular.py", line 343, in call is_stepping = pydev_step_cmd != -1 RecursionError: maximum recursion depth exceeded in comparison

粗体线让我搜索了一下,发现 this source 。根据答案,

It is a guard against a stack overflow, yes.

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

关于如果将大小大于 1995 的数组传递给数组 a,Python 程序将停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56016681/

相关文章:

python - Popen stdout 读取管道,使用 sleep 死锁

python - 使用 Python 与远程计算机交互

java - arrayList 中的项目从面板中删除,但不从实际 arrayList 中删除?

mysql - 如何对查询进行分组并随机获得每组第 n 个项目

java - 如何将 PNG 文件数组添加到 ArrayList<Image> - Java

python - 如何模拟掷骰子

python - 需要整数吗?打开()

python - Tensorflow:具有交叉熵损失的加权稀疏 softmax

带参数和不带参数的 Java 泛型列表和 ArrayList

java - 最佳SQL查询结果存储