![](/img/trans.png)
[英]How can I implement this recursive algorithm to toggle some values on and off depending on their parent's value in a hierarchy
[英]How can I get a recursive algorithm to return a value before it finishes running?
我有下面的算法,其目標是找到一系列數字的所有可能排列,因為它們可以切換符號。 當它到達樹中的葉節點時,它將調用另一個方法,該方法迭代列表以查看該排列的總和是否等於該系列中的一個數字。 我也在擺弄一個算法,看看一個系列的子集是否小於給定的數字。 例如 60、35 和 40,數字 60 + 40 < 110。我的問題是,一旦發現樹中的一個分支是我需要的,其他分支仍將被探索。 我怎么能打斷這個? 現在我只有一個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;
}
綜上所述,我的初衷是讓它將葉子節點和返回給調用程序。 不過,我從逐步執行程序中了解到,如果最右邊的分支是正確的排列,它不會只在該葉節點返回值處結束。 它仍然會跳回父級,然后繼續測試下一個分支。
您的返回值應該是一個布爾值,表示您是否找到了您要查找的總和。 由於您沒有使用方法返回的當前值,因此您似乎不需要它。
public static boolean PlusMinus(Node start, Node node, int Sum){
Node head = start;
if(node != null) {
// you should return true if either of the recursive calls returned true
if (PlusMinus(head, node.next, node.item+Sum))
return true;
return PlusMinus(head, node.next, node.item*(-1)+Sum);
} else {
return getSum(Sum,start);
}
}
編輯 :
我不知道你的getSum
方法是做什么的,但看起來你不需要它。 您應該將Sum-node.item
或Sum+node.item
傳遞給下一個遞歸調用,具體取決於當前節點應參與求和的符號,並檢查到達葉節點時是否達到 0。
public static boolean PlusMinus(Node start, Node node, int Sum){
if(node != null) {
// you should return true if either of the recursive calls returned true
if (PlusMinus(head, node.next, Sum - node.item))
return true;
return PlusMinus(head, node.next, Sum + node.item);
} else {
return Sum == 0;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.