我目前正在通過一些遞歸問題的方式工作,我目前停留在一個。只是在Java中的一個小遞歸問題
的問題是遞歸插入空格成一個字符串,爲每一個可能的位置,從而使輸出看起來是這樣的:
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子句是我遇到最大麻煩的地方,因爲每次我運行un-comment時,它都會進入無限循環。我甚至把int跟蹤語句(println
語句),它仍然沒有幫助。
我已經讀了很多遍,它對我來說沒有意義,爲什麼它不起作用。
+1作業問題的一個很好的例子。顯示代碼到目前爲止,確切地說問題的哪一部分是問題。 – 2011-04-01 15:54:34
當我需要遞歸解決方案時,它可以幫助我思考「程序必須做什麼」,而不是「程序如何做」。 – 2011-04-01 15:54:39
+1一直在尋找一個體面的程序化腦鍛鍊! – mre 2011-04-01 16:03:11