簡體   English   中英

如何讓遞歸算法在完成運行之前返回一個值?

[英]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.itemSum+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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM