2012-04-03 20 views
2

So habe ich ein wenig Probleme mit dem letzten Teil meiner Aufgabe auf Rekursion. Die Methode muss Rekursion verwenden, um eine Zeichenfolge zurückzugeben, die aus dem "Weben" von zwei als Parameter aufgenommenen Strings gebildet wird. Zum Beispiel:kombiniert Strings mit Rekursion

weave("aaaa", "bbbb") // should return the string "abababab" 
weave("hello", "world") // should return the string "hweolrllod" 
weave("recurse", "NOW") // should return the string "rNeOcWurse" 

Beachten Sie, dass die zusätzlichen Zeichen aus den ersten String-Zeichen in „urse“ -Komm nach den Zeichen, die miteinander verwoben wurden.

Das wichtige (und ärgerliche) Ding ist, dass ich keine Iterationsschleifen verwenden darf (für, während, während).

mein Code hier so weit ist:

public static String weave(String str1, String str2) 
{ 
    String word = str1 + str2; 
    if(str1 == null || str1.equals("") || str2 == null || str2.equals("")) 
    { 
     return word; 
    }    
    String word1 = weave(str1.substring(0, str1.length() - 1), str2.substring(0, str2.length() - 1)); 
    System.out.println(word1); 
    return word; 
} 

Für (Hallo, Welt), meine Ausgabe ist:

HW 
HeWo 
HelWor 
HellWorl 
HelloWorld 

Offensichtlich sind meine Charaktere nicht spinnen, ich bin so nicht sicher, was ist zu tun! Wie oben erwähnt, sollte das Verfahren auch nicht drucken. Ich fügte nur in der println Aussage als ein Test hinzu, um zu sehen, wo mein Programm war.

+0

erzählt, wie Ihre Ausgabe * aussehen sollte –

+0

@LiviuT. Sie geben das erwartete Endergebnis am Anfang in den Beispielen an. –

+0

@LiviuT. Siehe die Kommentare des ersten Codeblocks. –

Antwort

5

Ich denke, etwas wie das Folgende könnte funktionieren.

public String weave(String str1, String str2) 
{ 
    if(str1.isEmpty() || str2.isEmpty()) { 
    return str1 + str2; 
    } 
    return str1.substring(0, 1) + str2.substring(0, 1) + weave(str1.substring(1), str2.substring(1)); 
} 

Die Idee ist ziemlich einfach: Sie müssen nur das erste Zeichen von beiden Eingabezeichenfolgen Pop müssen und beide Charaktere verketten und den Rückgabewert aus der Funktion rekursiv mit den gestrippt Eingabezeichenfolgen, bis einer der Eingabezeichen Aufruf ist In diesem Fall sollten Sie nur die nicht leere Zeichenfolge zurückgeben.

weave("abcdef", "12"): "a" + "1" + weave("bcdef", "2") 
    | 
    +- weave("bcdef", "2"): "b" + "2" + weave("cdef", "") 
     | 
     +- weave("cdef", ""): "cdef" 

in Resultierende:

weave("abcdef", "12"): "a" + "1" + "b" + "2" + "cdef": "a1b2cdef" 
0

Das Problem mit Ihrem Code ist:

String word = str1 + str2; 
//... 
return word; 

Egal, wie der rekursive Aufruf, am Ende ist es nur das Ergebnis aus dem ersten Verfahren zurückkehrt Rufen Sie an, wenn Sie "Hallo", "Welt" übergeben.

String word = str1 + str2; //hello + world 
//... other things and the recursive call doesn't matter 
//return word; //return the first word variable which is helloworld