Java 尝试递归地打印特定srtring的所有子字符串,而根本不使用循环

Java 尝试递归地打印特定srtring的所有子字符串,而根本不使用循环,java,recursion,backtracking,Java,Recursion,Backtracking,我试图在没有帮助或根本不使用循环的情况下递归打印字符串的所有子字符串。例如,如果字符串=“home” 它应该打印: h o m e ho hm he hom hoe hme om oe ome me home b y e by be ye bye 如果是“再见”,则应打印: h o m e ho hm he hom hoe hme om oe ome me home b y e by be ye bye 我只能执行以下代码: public static void printSub

我试图在没有帮助或根本不使用循环的情况下递归打印字符串的所有子字符串。例如,如果字符串=“home” 它应该打印:

 h o m e ho hm he hom hoe hme om oe ome me home
 b y e by be ye bye
如果是“再见”,则应打印:

 h o m e ho hm he hom hoe hme om oe ome me home
 b y e by be ye bye
我只能执行以下代码:

public static void printSubs(String s){
    printSubs(s, "", 0, 0, s.length());
}

private static void printSubs(String s, String str, int i, int j, int length){
    if(i<length && j<length){
        if(j<s.length()){
            if(i==j)
                System.out.print(s.charAt(i)+" ");
            if(i<j){
                str+=s.charAt(i)+""+s.charAt(j);
                System.out.print(str+" ");
            }
            printSubs(s, "", i, j+1, length);
        }
        if(j==s.length()-1){
            printSubs(s.substring(i), "", i+1, i+1, length);
        }
    }
}

谢谢

我认为您的代码中的主要问题是您根本没有使用缓冲区
str
,因此,您将要打印的所有字符串将只由2个字符组成:
str=s.charAt(I)+“+s.charAt(j)(这里的+=是无用的,因为在您的代码中,
str==”
每次迭代)。但我认为使用缓冲区是个好主意,你只需要弄清楚如何使用它。

我认为另一个问题是,您最后一次调用printSubs(s.substring(I),“”,I+1,I+1,length)那太乱了
您可以使用子字符串“s”并设置
i=O
j=0
以从开始重新启动此子字符串,而不会忘记
length=length-1
以结束此子字符串。

或者增加索引(i和j)并保留完整字符串

您不能修改字符串,它们是最终的。为什么不使用
s.tocharray()
s.chars()
并按照您的意愿混合所有这些字符?为什么“没有循环”?@SteveSmith也许这是关于递归之类的作业?有更好的场景来练习这个,但为什么不呢?@SteveSmith这是一个练习,我们不允许使用任何循环。