我正在尝试解决 Python 中的生成递归问题。问题是:
- 在由整数组成的列表中,找到具有最大总和的相邻子列表并返回该总和。
- 例如,如果给定列表是 [-2, 1, -3, 4, -1, 2, 1, -5, 4],则具有最大和的相邻子列表是 [4, -1, 2, 1 ],总和为 6
我必须按照给定的算法来解决 find_max:
- 将给定列表(在中点)拆分为两部分:L_left 和 L_right。
- 返回以下 3 的最大值:
- 任何子列表的最大总和完全位于 L_left 中(使用对 find_max 的递归调用)。
- 任何子列表的最大总和完全位于 L_right 中(使用对 find_max 的递归调用)。
- L_left 和 L_right 重叠的最大子列表;IE,
- 第一:找到从中点开始(向左)到中点左侧某个点结束的任何子列表的最大总和
- 第二:找到从中点开始(向右)到中点右侧某个点结束的任何子列表的最大总和
- 最后:将两个最大总和相加。
我尝试了以下方法:
def find_max(L):
length = len(L)
mid_index = length/2
if length == 1:
return L[0]
else:
left = find_max(L[0:(length/2)])
right = find_max(L[(length/2):length])
max_subset = max(left,right,left+right)
return max_subset
这能够解决长度为 2 的列表。如何扩展它以适用于具有更多元素的列表?