如何在Java中使用递归来解决非负子集和?

时间:2015-10-11 23:54:35

标签: java recursion

我对这个问题感到困惑:

  

给定一组非负整数和值sum,目标是识别其元素总和等于sum的所有子集。例如,如果非负整数集为{3; 34; 4; 12; 5; 2}sum = 9,则答案为{4; 5}{4; 2; 3}

这个问题必须通过递归方法(一个递归函数和一个主string[]args函数)来解决,但我不知道如何制作它。有人可以暗示一下吗?

1 个答案:

答案 0 :(得分:0)

看到你要求提示而不是代码,我会给你一个关于算法的指针,以帮助你入门。

通常递归算法类似于:

recursiveFunction(currentResult, context)
    if currentResult satisfies given condition
        process currentResult
    for each possibleResult in context
        recursiveFunction(possibleResult, contextWithResultRemoved)

在您的情况下,方法的签名将类似于:

public void allSubsetsWithSum(int targetSum, Set<Integer> current, Set<Integer> remaining)

满意条件测试只是将电流总和与目标进行比较。

'for each'只会查看remaining中的每个整数,并在递归之前将其移至current

有效率快捷方式,例如不处理来自remaining的整数,这将使总和超过目标。但这并不是使算法工作的必要条件。

希望这会让你开始。如果您不理解这些提示,请进一步询问。