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