4

ここで同様の質問があると言って始めるべきですが、私が行っている課題ではループを使用できず、これらの質問に対するすべての回答でループを使用しています。そのため、Java 6 と再帰を使用して、特定の文字列のすべての部分文字列を生成します。たとえば、指定された String word = "Ralph"; 出力をこのようにフォーマットする必要があります。

Ralph
Ralp
Ral
Ra
R
alph
alp
al
a
lph
lp
l
ph
h

これが私の生成方法です

    //written by Justin Tew<BR>

public static void generate(String word) 
{


    //base case... wtf is the base case here?
    //idk bout this 
    if (word.length() == 1)
    {
        System.out.println(word);
        return;
    }


    //recursive case
    if (word.length() != 0)
    {

        System.out.println(word);
        generate(word.substring(0, word.length()-1)); //gets the first 5 substrings
    }

出力:

Ralph
Ralp
Ral
ra
r

私の考えでは、この呼び出しgenerate(word.substring(1, word.length()-1));は次の 5 を取得する必要がありますが、非常に奇妙な出力は得られません...

何か案は?

4

6 に答える 6

2

2つの答えは両方ともほとんど正しかった。という新しいメソッドを追加しましたsuffixGen

public static void suffixGen(String word)
{
    if (word.length() > 1)
    {
        generate(word);
        suffixGen(word.substring(1));
    }

}

私のメインでは、suffixGen代わりに呼び出すだけgenerateで、望ましい結果が得られます。

于 2012-11-03T16:47:45.240 に答える
1

単語の文字を再帰する代わりに、単語の長さを再帰できます。たとえば、再帰の最上位レベルでは、word.length()文字、文字などのすべての部分文字列を見つけることができますword.length() - 1。ただし、これにはおそらく 2 つの再帰的方法が必要です。1 つは単語の長さをループし、もう 1 つはその長さのすべての可能な部分文字列をループします。

于 2012-11-02T15:06:22.263 に答える
1

すでにほとんどの作業を完了しているように聞こえます。別の再帰メソッドgenerateSuffix(word)を書くだけです

  • 最初の呼び出しgenerate(word)
  • generateSuffix()次に、word の最も長い接尾辞で呼び出します。

生成したものと同様の基本ケースが必要です。

于 2012-11-02T15:10:44.847 に答える
0

ヘルパー メソッドは必要ありません。追加の文字列をメソッドに渡す場合は、以下のメソッド呼び出しに示すように、その値を空白として渡すだけです。

    public static void substrings(String str, String temp)
    {
        if(str.length()==0)
        {
            System.out.println(temp); return;
        }

          substrings(str.substring(1), temp+str.substring(0,1));
          substrings(str.substring(1), temp);
    }

サンプル呼び出し ---> substrings("abc", "") ;

以下の出力が生成されます。

abc

ab

交流

a

紀元前

b

c

実際には空の文字列である、目に見えない文字列が 1 つあります。

于 2014-07-05T06:27:42.613 に答える