Java Recursion在数组中查找MAX sum

时间:2017-04-23 14:12:24

标签: java arrays recursion

我试图找出一个计算数组中最高数字总和的解决方案。但是,我的限制是我不能在数组中使用相邻的值。

如果给出数组int [] blocks = new int[] {15, 3, 6, 17, 2, 1, 20};,则计算出的最高总和为52(15 + 17 + 20)。 我的目标是从递归解决方案转变为使用动态编程的解决方案,但是,我遇到了递归解决方案的问题。

我已初始化的基本案例:

if(array.length == 0)
    return 0;
if(array.length == 1)
    return array[0];

创建基本案例后,我不确定如何继续递归过程。 我最初试图说,如果array具有一定的长度,那么我可以计算出计算的最大值(Math.max): 例如if array.length = 3 return Math.max(array[0], array[1], array[2], array[0]+ array[2])

我遇到的问题是我可以得到一个长度为100的数组。 如何在此问题中使用递归?

1 个答案:

答案 0 :(得分:1)

我认为你的问题的递归解决方案是(伪代码):

maxsum(A,0) = 0
maxsum(A,1) = A[0]
maxsum(A,k) = max(maxsum(A,k-2)+A[k-1], maxsum(A,k-1)), for k >= 2

其中maxsum(A,k)表示从A开始并且长度为0的数组k的子数组的最大总和。我确信您可以轻松地将其翻译成Java,它几乎完全按字面翻译。