首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java中设置递归程序的最大深度?

如何在java中设置递归程序的最大深度?
EN

Stack Overflow用户
提问于 2021-02-10 00:24:37
回答 1查看 53关注 0票数 2

我用java写了一个递归程序,它接受一个字符数组,有两个方法,一个切换最左边的瓦片的位置,另一个将最右边的瓦片移动到最左边的瓦片的左边。然后,它返回移动的顺序,这使得数组按字母顺序移动的次数最少。它似乎在工作,但我也应该设置一个最大深度(15),我想知道的是,当它达到最大深度时,我应该返回什么?它现在似乎可以工作,但我不确定它是否正确。

这是代码的一部分:

代码语言:javascript
复制
 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;
    }
EN

回答 1

Stack Overflow用户

发布于 2021-02-10 00:44:12

这个例子看起来不错。就我个人而言,我会使用nrOfMoves++而不是nrOfMoves+1

我会让它倒计时(剩余的移动次数而不是执行的移动次数)。这确保了您的Sorter方法不需要知道它需要在什么深度停止。它只是得到了它可以再执行多少次递归的限制

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66122966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档