查找字符串中所有子字符串的递归java程序
我试图找到字符串中的所有子字符串,我已经编写了以下代码,但我有一些不需要的输出,如您所见: 该方法首先打印子字符串(0,1),然后通过用1递增b来调用自己,并继续这样做,当b>string的长度时,它将预递增a,并将a+1传递给b,然后继续这样做,直到最后一个子字符串a+1==string的长度,这是我的递归程序应该终止的时候查找字符串中所有子字符串的递归java程序,java,recursion,substring,Java,Recursion,Substring,我试图找到字符串中的所有子字符串,我已经编写了以下代码,但我有一些不需要的输出,如您所见: 该方法首先打印子字符串(0,1),然后通过用1递增b来调用自己,并继续这样做,当b>string的长度时,它将预递增a,并将a+1传递给b,然后继续这样做,直到最后一个子字符串a+1==string的长度,这是我的递归程序应该终止的时候 public static void main(String[] args) { recsub("java",0,1); } public static voi
public static void main(String[] args) {
recsub("java",0,1);
}
public static void recsub(String str,int a,int b){
if(b>str.length()) {
System.out.println();
recsub(str,++a,a+1);
}
else {
System.out.print(str.substring(a,b)+" ");
}
if((a+1)==str.length()) {
}
else {
recsub(str,a,b+1);
}
此代码的输出为:
j ja jav java
a av ava
v va
a
a
v va
a
a
或者我可以通过这个方法跳出并返回到main,每当程序输入if(if(a+1)=…)时,比如打破一个循环吗?如果你的逻辑结构良好,你就不必打破这样的例程,尽管根据需要返回是合法的(通常是有用的) 错误出现在第二次递归中:这应该取决于子字符串大小b是否足够短 我自由地替换了一个字母的变量名(a->start\u pos,b->size),更改了测试字符串(“java”有两个a,因此更难跟踪),并清理了空白
public class substr {
public static void main(String[] args) {
recsub("abcd", 0, 1);
}
public static void recsub(String str, int start_pos, int size){
if (size > str.length()) {
// Print newline; restart with next character
System.out.println();
recsub(str, ++start_pos, start_pos+1);
}
else {
// Print one substring
System.out.print(str.substring(start_pos, size)+" ");
if (start_pos+1 < str.length()) {
recsub(str, start_pos, size+1);
}
}
}
}
a ab abc abcd
b bc bcd
c cd
d