簡體   English   中英

如何在 java 中設置遞歸程序的最大深度?

[英]How to set max depth for recursive program in java?

我在 java 中編寫了一個遞歸程序,它采用字符數組和兩種方法,一種是切換最左邊的兩個瓦片的位置,另一種是將最右邊的瓦片移動到最左邊的瓦片的左側。 然后它返回移動的順序,使數組按字母順序排列,移動次數最少。 它似乎正在工作,但我也應該設置最大深度(15),我想知道當它達到最大深度時我會返回什么? 它現在似乎正在工作,但我不確定它是否正確。

這是代碼的一部分:

 public static String Sorter(char[] letters){
        int nrOfMoves = 0;
        return Sorter(letters,nrOfMoves);
    }
    
    private static String Sorter(char[] letters, int nrOfMoves){
        if(sorted(letters)) return "";
        if(nrOfMoves >= 15) return "" ; //??
        
        switchLeft(letters);
        String moveb = "b" + Sorter(letters,nrOfMoves+1);
        switchLeft(letters);
        
        rightToLeft(letters);
        String moves = "s" + Sorter(letters,nrOfMoves+1);
        leftToRight(letters);
        
        if(moves.length()<moveb.length()) return moves;
        return moveb;
    }

這個例子似乎很好。 就個人而言,我會使用nrOfMoves++而不是nrOfMoves+1

我會讓它倒計時(剩下的移動次數而不是執行的移動次數)。 這確保您的Sorter方法不需要知道它需要停止的深度。 它只是限制了它可以執行多少次遞歸

public static String Sorter(char[] letters){
    int nrOfMoves = 15;
    return Sorter(letters,nrOfMoves);
}

private static String Sorter(char[] letters, int nrOfMoves){
    if(sorted(letters) || nrOfMoves <= 0){ 
       return "";
    }

    switchLeft(letters);
    String moveb = "b" + Sorter(letters,nrOfMoves--);
    switchLeft(letters);

    rightToLeft(letters);
    String moves = "s" + Sorter(letters,nrOfMoves--);
    leftToRight(letters);

    if(moves.length()<moveb.length()) return moves;
    return moveb;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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