java 递归 返回_java-使用递归时在根节点处返回路径

我试图为subset-sum problem创建一个递归函数.我创建了一个受this answer启发的函数.

问题:我正在尝试从某个数组(例如[50,40,30,20])的数组中选择一些元素,这些数组的总和是我定义为sum(例如100)的某个值.

我已经按照该答案的建议创建了稍微修改的函数.

从前面拾取并选择它或不选择它.

如果我选择一个元素,则简化列表中的总和将小于所选元素,否则,如果我不选择该元素,则简化列表中的总和将为原始元素.

但是,我发现最困难的事情是返回跟踪到递归调用的根节点的路径.当我到达总和匹配的节点时,我可以打印路径.

这是我的功能:

private static boolean findSumFromSubList(ArrayList set, Integer sum, ArrayList result) {

if (sum < 0)

return false;

if (sum == 0) {

// Got it! Awesome! Print it!

System.out.println(result);

return true;

}

if (set.size() == 0 && sum != 0)

return false;

ArrayList newSet = new ArrayList<>(set);

newSet.remove(0);

System.out.println("Left: Picking up " + set.get(0));

result.add(set.get(0));

if (findSumFromSubList(newSet, sum - set.get(0), new ArrayList<>(result))) {

return true;

}

System.out.println("Right: NOT Picking up " + set.get(0));

result.remove(result.size()-1);

if (findSumFromSubList(newSet, sum, new ArrayList<>(result))) {

return true;

}

return false;

}

我这样称呼它:

ArrayList pair = new ArrayList<>();

pair.add(50);

pair.add(40);

pair.add(30);

pair.add(20);

ArrayList result = new ArrayList<>();

boolean resultBool = findSumFromSubList(pair, 100, result);

System.out.println("bool: " + resultBool + ", result: " + result);

我得到的输出是:

Left: Picking up 50

Left: Picking up 40

Left: Picking up 30

Right: NOT Picking up 30

Left: Picking up 20

Right: NOT Picking up 20

Right: NOT Picking up 40

Left: Picking up 30

Left: Picking up 20

[50, 30, 20]

bool: true, result: [50]

因此,我可以在递归中获取输出,但是如何将该值返回给根调用函数.因为结果仅返回50.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值