我试图找到一个字符串中的所有子字符串,我编写了以下代码,但是我有一些不需要的输出,如下所示:该方法首先打印子字符串(0,1),然后通过用b递增b来调用自身1并继续这样,当b> string的长度时,它将预先增加a,并将a + 1传递给b,并继续这样,直到最后一个子串,其中a + 1 == string的长度,当我递归时程序应终止。
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
还是只要程序输入if(if(a + 1)== ...),就可以像打破循环那样,突破这种方法并返回到主程序吗?
如果您合理地构建了逻辑,则不必中断这样的例程,尽管根据需要返回是非常合法的(并且通常很有用)。
错误在于您的第二次递归:这应该以子字符串大小b足够短为条件。
我已经自由地替换了一个字母的变量名(a-> start_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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句