Java - SubSet Sum Recursion递归绘制

时间:2016-06-21 12:57:32

标签: java recursion

我有一个理解代码递归的问题,我试图画树跟随,但有些事情对我来说并不清楚。 有人可以帮我理解代码片段,并在页面上绘制,或绘制或任何其他软件,递归树,以便我可以完全理解代码。

为什么有两次递归? 我不明白第二次递归是如何工作的(在||之后)。

Example painted tree

public static boolean hasSum(int[] array, int start, int sum) {
    if (sum == 0)
        return true;

    if (start > array.length - 1)
        return false;

    return hasSum(array, start + 1, sum - array[start])
            || hasSum(array, start + 1, sum);

}

非常感谢您的帮助

1 个答案:

答案 0 :(得分:2)

搜索到的子集总和(即sum)可以包含当前元素(array[start](因此||)不包含当前元素

如果它包含array[start],我们应该找到从索引start+1开始的子数组的子集,其总和为sum - array[start]

这由hasSum(array, start + 1, sum - array[start])处理。

如果它不包含array[start],我们应该找到从索引start+1开始的子数组的子集,其总和为sum(即,因为当前元素不参与总和,我们必须在较小的数组中找到相同的总和。

这由hasSum(array, start + 1, sum)处理。

因此有两个递归调用。