Seite 1 von 1

Rekursion beenden

Verfasst: Montag 31. Dezember 2007, 11:22
von daniels7
Hallo,
ich würde gerne wissen wie man eine Rekursion während ihres Laufes beenden kann, ungefähr so als ob ein Fehler auftreten würde, nur halt ohne Fehler :wink:
BlackJack, du hattest in meinem anderen Thread erzählt, dass das mit Ausnahmen geht, ich würde mich freuen, wenn du das nochmal näher erläuterst.

Re: Rekursion beenden

Verfasst: Montag 31. Dezember 2007, 11:32
von Andy
daniels7 hat geschrieben:Hallo,
ich würde gerne wissen wie man eine Rekursion während ihres Laufes beenden kann, ungefähr so als ob ein Fehler auftreten würde, nur halt ohne Fehler :wink:
BlackJack, du hattest in meinem anderen Thread erzählt, dass das mit Ausnahmen geht, ich würde mich freuen, wenn du das nochmal näher erläuterst.
Hallo daniels7,

BlackJack schrieb aber auch, dass man ohne weitere Informationen keine genauen Angaben machen kann. Damit könnte er z. B. genauso wie ich Dir bei Deinem Tkinter-Problem prophezeit hatte, ein kleines Codebeispiel gemeint haben. :wink:

Verfasst: Montag 31. Dezember 2007, 11:39
von daniels7
es ist schwierig euch was konkretes zu geben, mein Programm umfasst mehrere Seiten und ein Einzelteil ist schwer zu verstehen, aber ich versuchs mal:

Code: Alles auswählen

def replace_absatz(text):
    x=0
    y=1
    b=[]
    for i in range(len(text)):
        if text[x:y]=='\\':
            ergebnis.insert(INSERT,text[:x])
            ergebnis.insert(INSERT,'\n')
            b=text[y+1:]
            replace_absatz(b)
        x=x+1
        y=y+1
    #wenn ich hier nen Fehler einbaue funktioniert das Programm
also das ist jetzt ein Auszug aus meinem Programm, ich habe die Stelle kommentiert, wo man es abbrechen müsste, damit es ordnungsgemäß funktioniert.

Verfasst: Montag 31. Dezember 2007, 11:47
von Zap
Dieser Abbruch muss doch mit irgendeiner Form von Bedingung zusammenhängen, sonst macht er meiner Meinung nach keinen Sinn.

Verfasst: Montag 31. Dezember 2007, 11:55
von daniels7
ich kann dir nicht genau sagen warum, aber wenn das Programm an der markierten Stelle abbricht ist es perfekt. Da wäre sowas wie der exit()-Befehl gut, nur eben für die Methode, und nicht für das ganze Programm.
Sachen wir return funktionieren an der Stelle nicht.

Verfasst: Montag 31. Dezember 2007, 12:05
von BlackJack
Schau Dir die `replace()`-Methode auf Zeichenketten an und vergiss diese kranke rekursive "Lösung".

Rekursion sollte man in Python wirklich nur für rekursive Probleme benutzen und nicht als Ersatz für einfache Schleifen, oder wie in diesem Fall fertige Funktionen oder Methoden.

Verfasst: Montag 31. Dezember 2007, 12:23
von daniels7
toll, die replace Methode kenne ich auch, nur wie sage ich dem Programm, dass es '\\' und den einen Buchstaben danach(Welcher beliebig sein kann) durch etwas anderes ersetzen soll?

Verfasst: Montag 31. Dezember 2007, 12:27
von BlackJack
Sorry, soweit hatte ich mir das komische Konstrukt nicht angeschaut. Das klingt nach einem Fall für das `re`-Modul.

Code: Alles auswählen

In [58]: print re.sub(r'\\.', '\n', r'Test a\xTest b')
Test a
Test b

Verfasst: Montag 31. Dezember 2007, 12:28
von Python 47
Um dir trotzdem mal zu zeigen, wie man eine Rekursive Funktion abbricht hier ein ganz simples Beispiel:

Code: Alles auswählen

def fak(x):
   if x==1:
       return 1 #Abbruch der Rekursiven Funktion

   else:
       return x*fak(x-1)
Du brauchst also eine Abbruchbedingung. Wenn diese Eintritt kommt es zu keinem weiteren rekursiven Aufruf mehr.

Verfasst: Mittwoch 2. Januar 2008, 11:45
von windner
Du brauchst also eine Abbruchbedingung. Wenn diese Eintritt kommt es zu keinem weiteren rekursiven Aufruf mehr.
Hatte er denn keine?

Verfasst: Mittwoch 2. Januar 2008, 12:08
von BlackJack
Siehst Du da oben eine?

Verfasst: Mittwoch 2. Januar 2008, 12:12
von windner
Ja, eine invertierte.
Nämlich rekursiert er nur, wenn if text[x:y]=='\\' wahr ist (Zeile 7).

Verfasst: Mittwoch 2. Januar 2008, 12:36
von BlackJack
Wenn man möchte kann man das so sehen, aber in der Schleife ist das für mich einfach kein Rekursionsanker. Es verhindert ja auch nicht die unerwünschte weitere Verarbeitung.