【发布时间】:2016-04-03 05:58:08
【问题描述】:
我有下面的算法,其目标是找到一系列数字的所有可能排列,因为它们可以切换符号。当它到达树中的叶节点时,它将调用另一个方法,该方法遍历列表以查看该排列的总和是否等于系列中的数字。我也在摆弄一个算法来查看一个系列的子集是否小于给定的数字。例如 60、35 和 40,数字 60 + 40 system.exit(1);
public static int PlusMinus(Node start, Node node, int Sum){
Node head = start;
boolean Success = false;
if(node != null){
PlusMinus(head, node.next, node.item+Sum);
PlusMinus(head, node.next, node.item*(-1)+Sum);
return Sum;
}
else{
Success = getSum(Sum,start);
if(Success == true){
System.out.println("Yes");
System.exit(1);
return 1;
}
}
return 0;
}
看了上面,我的初衷是让它把叶子节点和返回给调用程序。不过,正如我从逐步执行程序中了解到的那样,如果最右边的分支是正确的排列,它不会只是在那个叶节点返回值处结束。它仍然会跳回父级,然后继续测试下一个分支。
【问题讨论】:
-
返回sum并调用这两个方法有什么意义?
-
永远不要将
System.exit()用于控制流。这是一个非常糟糕的设计。用户期望该方法将返回一个值,但并不期望它会停止整个 JVM。