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

2024-06-28 10:46:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图设置一个整数数组,其大小为10000。你知道吗

但是,如果数组a的长度小于1995,那么代码就非常有效。 如果我把它改成2000或更多,程序就会停止工作。你知道吗

如果我将数组a的大小设置为10000,我希望这段代码能够工作。 下面是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))

Tags: 代码inforlenreturnifrandom数组
1条回答
网友
1楼 · 发布于 2024-06-28 10:46:42

问题不在于数组长度,而在于递归调用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.

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

相关问题 更多 >