开始学习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))
您的问题在于此函数:
准确地说,前5行。在Python2.x中“工作”(不知道预期结果)的原因是
/
用于楼层划分,而在Python3.x中/
用于浮点除法。由于浮点舍入误差,start
很可能永远不会等于end
。在如果整数楼层除法是您要的,您可以将
/
替换为//
。在这样,错误将消失并返回
(8, 10, 32)
您可以增加允许的堆栈深度-这样,就可以进行更深入的递归调用,如下所示:
。。。但我建议您首先尝试优化代码,例如,使用迭代而不是递归。在
相关问题 更多 >
编程相关推荐