繁体   English   中英

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

[英]How to solve the non-negative subset sum using recursion in Java?

这个问题让我很困惑:

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

这个问题必须通过一种递归方法(一个递归函数和一个主string[]args函数)解决,但是我不知道如何实现。 有人可以提示吗?

看到您要求提示而不是代码,我将为您提供有关算法的指导,以帮助您入门。

通常,递归算法如下所示:

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整数,这将使总和超出目标。 但这并不是使算法起作用的必要条件。

希望这会帮助您入门。 如果您不明白提示,请询问其他问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM