我用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;
}发布于 2021-02-10 00:44:12
这个例子看起来不错。就我个人而言,我会使用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;
}https://stackoverflow.com/questions/66122966
复制相似问题