2017-01-17 5 views
-1

Dies ist die iterative Version. Wie bekomme ich das gleiche Ergebnis mit einem rekursiven Code? DieseWie bekomme ich alle aufeinanderfolgenden Teilstrings eines Strings mit Rekursion?

def it(word): 
    set1 = set() 
    for begin in range(len(word)): 
     for end in range(begin,len(word)): 
     set1.add(word[begin:end+1]) 
return set1 

ist, was ich habe, aber es gibt nicht jeder Teilkette zurück

def recursievesubstring(string): 
    lijst = [] 
    if len(string) == 0: 
     lijst.append("") 
    else: 
     i = 0 
     if len(string) > 1: 
      midden = len(lijst)//2 
      lijst.append(string[midden+1]) 
     while i < len(string): 
      lijst.append(string[:i]) 
      lijst.append(string[i:]) 
      recursievesubstring(string[i:-i]) 
      i+=1 
    return lijst 

def main(): 
    string = input("Geef een woord: ") 
    print(recursievesubstring(string)) 
+1

Warum Rekursion ?? – Copperfield

+0

weil mein Professor es so will. – Elias

+2

Sie sollten wahrscheinlich Ihre Hausaufgaben selbst machen –

Antwort

1

was macht dies kompliziert ist, dass Sie eine doppelte Iteration haben, so eine Möglichkeit, diese rekursive Funktion für jede Schleife anzugehen und sie zu kombinieren, bedeutet dies eine Hilfsfunktion, die die innere Schleife und die Haupt, die die behandeln äußere Schleife.

Zu diesem Zweck müssen wir die Arbeit der iterativen Funktion verstehen, wird ein einfacher Druck

def it(word): 
    set1 = set() 
    for begin in range(len(word)): 
     for end in range(begin,len(word)): 
      set1.add(word[begin:end+1]) 
      print(word[begin:end+1]) 
     print() 
    return set1 

helfen und ein einfacher Test ein nützliches Muster

>>> x=it("abcdef") 
a 
ab 
abc 
abcd 
abcde 
abcdef 

b 
bc 
bcd 
bcde 
bcdef 

c 
cd 
cde 
cdef 

d 
de 
def 

e 
ef 

f 

>>> 

, die das Ziel macht offenbart mehr Klar, die Hilfsfunktion nimmt eine Zeichenkette und entfernt entweder das letzte Zeichen oder nimmt eine Unterzeichenfolge jedesmal größer, während die Hauptfunktion das erste Zeichen in jedem rekursiven Aufruf entfernen würde.

Jetzt würde ich nicht geben Ihnen einen funktionierenden Code, sondern eine Vorlage, die tail recursion verwenden, für Sie

def recur_aux(word, result=None, end=None): 
    if result is None: 
     result = set() 
    if end is None: 
     end = # an adequate default value 
    if #an adequate stop condition, aka base case: 
     return result 
    else: 
     #do an adequate step 
     return recur_aux(word, result, #end + or - 1) 

def recur(word,result=None): 
    if result is None: 
     result = set() 
    if word: #this is equivalent to len(word)!=0 
     #do a adequate step calling recur_aux 
     return recur(# an adequate recursive call) 
    else: 
     return result 

geben ihm einen Versuch zu beenden, und testen Sie es wie dies zum Beispiel

>>> it("abcdef") == recur("abcdef") 
+0

Ich weiß, dass ich nicht Danke sagen soll, aber ich möchte dir wirklich für deine Zeit danken! Ich werde sicherlich versuchen es zu versuchen. – Elias

+0

ok, lassen Sie mich wissen, wenn Sie Erfolg :) – Copperfield

+0

mmm auf Sekunde obwohl, Sie brauchen nicht den 'end' Parameter ... – Copperfield

1

Sie benötigen Helfer Methoden zu machen, die mehr Argumente nehmen. (Tail-Rekursion) Wenn die Einschränkung ist, eine rekursive Funktion zu schreiben, können Sie keine for- oder while-Schleifen verwenden.

Verwandte Themen