繁体   English   中英

比较中是否超过了最大递归深度?

[英]maximum recursion depth exceeded in comparison?

开始学习python,这是我尝试过的最大和子数组。 最后出现“比较中超过了最大递归深度”。 我的算法对我来说似乎还可以。 如果我做错了任何事情,请帮助我。

import sys
import math
def maxtuple(lss,rss):
    if lss[2] > rss[2]:
        return lss
    else:
        return rss
def crosssubarray(A, start, mid, end):
    ls=rs=-sys.maxsize
    maxleft=0
    maxright=0
    sum = 0;
    for i in reversed(range(start, mid)):
        sum = sum + A[i]
        print(i)
        if sum > ls:
            ls = sum
            maxleft = i
    sum = 0
    for i in range(mid+1, end):
        sum = sum+ A[i]
        if sum > rs:
            rs = sum
            maxright = i
    return (maxleft, maxright, ls+rs)

def maxsubarray(A,start,end):
    if start == end:
        return (start,end,A[start])
    else:
        mid = (start+end)/2
        lss = maxsubarray(A, start, mid)
        rss = maxsubarray(A, mid+1, end)
        css = crosssubarray(A, start, mid, end)
        maxsub = maxtuple(lss,rss)
        maxall = maxtuple(maxsub, css)
        return maxall

A = [13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7]
print(maxsubarray(A,0,15))

您的问题在于此功能:

def maxsubarray(A,start,end):
    if start == end:
        return (start,end,A[start])
    else:
        mid = (start+end)/2
        lss = maxsubarray(A, start, mid)
        rss = maxsubarray(A, mid+1, end)
        css = crosssubarray(A, start, mid, end)
        maxsub = maxtuple(lss,rss)
        maxall = maxtuple(maxsub, css)
        return maxall

确切地说,前5行。 在python 2.x中“工作”(不知道您的预期结果)的原因是因为/用于地板分割,而在python 3.x中/用于浮点分割。 由于浮点舍入误差, start很可能永远不会等于end


如果要进行整数除法,则可以将/替换为//

这样做,错误将消失并返回(8, 10, 32)

您可以增加允许的堆栈深度-这样,将可以进行更深层的递归调用,如下所示:

import sys
sys.setrecursionlimit(10000) # 10000 is an example, try with different values

...但是我建议您首先尝试优化代码,例如,使用迭代而不是递归。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM