这是博主在今日计算机考试上遇到的一道递归题,由于前面做得太慢,只剩下了15分钟,绞尽脑汁才把这道题的主体部分给写了出来。
题目是这样的:给出一个列表,里面全是integer,比如 [8,4,4,8,12,3,2,9],或者[2,1,14,6,4,3] ;我们要做的呢,是把找出这个列表最大的corner和。什么是corner和呢,就是指列表开头或者结尾的K个元素之和,可以是一些在头一些在尾,也可以全部在开头,全部在结尾。反正这K个元素一定是挨在开头或者结尾的。
比如[8,4,4,8,12,3,2,9],3个元素corner和最大值是21,即8+4+9
又比如[2,1,14,6,4,3],3个元素corner和最大值是17,即2+1+14
下面提供我写的代码
def max_sum(arr, K):
if K==0:
return 0
else:
list0=[]
list0.append(max_sum(arr[:-1],K-1)+arr[-1])
list0.append(max_sum(arr[1:],K-1)+arr[0])
return max(list0)
# you can use the following as test cases
arr = [8, 4, 4, 8, 12, 3, 2, 9]
print(max_sum(arr, K=3))
arr = [2, 1, 14, 6, 4, 3]
print(max_sum(arr, K=3))
欢迎大家建议指正。