【发布时间】:2011-07-27 19:27:10
【问题描述】:
我目前正在解决一些递归问题,但我目前被困在一个问题上。
问题是递归地将空格插入到字符串中,插入到每个可能的位置,使得输出看起来像这样:
Input: ABCD
Out:
ABCD
A BCD
A B CD
A B C D
A BC D
AB CD
AB C D
ABC D
我目前已经解决了这个问题,并且达到了一个类似的点:
Input: ABCD
Out:
ABCD
A BCD
A B CD
A B C D
到目前为止我的问题代码:
import java.util.Scanner;
public class Words
{
static int counter = 0;
static String fString = "";
static String fString2 = "";
static String previous = "";
static String input = "";
static String other = "";
public static String segment(String inputPrefix, String restOfString)
{
if(restOfString.length() != 0)
{
if(inputPrefix.equals(""))
{
fString += restOfString + "\n";
segment(restOfString.substring(0,1), restOfString.substring(1));
}
else
{
previous += inputPrefix + " ";
fString += previous + restOfString + "\n";
fString2 = previous + restOfString;
segment(restOfString.substring(0,1)
, restOfString.substring(1));
}
}
/*else
{
counter++;
other = fString2.replaceAll(" ", "");
System.out.println(other);
if((counter + 1) < other.length())
{
System.out.println("Other: " + other);
input = other.substring(0, counter + 1);
other = other.substring(counter + 1);
System.out.println(counter);
System.out.println("input: " + input);
System.out.print("other: " + other);
segment(input, other);
}
else
return fString;
}*/
return fString;
}
public static void main (String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.print("Enter a string: ");
String input = scan.next();
System.out.println();
System.out.println(segment("", input));
}
}
第二个 else 子句是我最麻烦的地方,因为每次我在未注释的情况下运行它时,它都会进入无限循环。我什至放了 int trace 语句(println 语句),但它仍然没有帮助。
我已经通读了很多遍,但我不明白为什么它不起作用。
【问题讨论】:
-
+1 个很好的家庭作业问题示例。显示到目前为止的代码以及问题的确切部分。
-
当我想要一个递归解决方案时,它可以帮助我思考“程序必须做什么”而不是“程序将如何做”。
-
+1 一直在寻找体面的程序化大脑锻炼!
-
输出字符串的列出方式可以提示你如何递归
-
我赞同 Soronthar 的观点。 A B C D 是直观的,但之后的逻辑是什么?我知道对于没有得到它的人(我)很难用语言来解释:)