Rekursion beenden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
daniels7
User
Beiträge: 15
Registriert: Sonntag 30. Dezember 2007, 12:51

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.
Andy
User
Beiträge: 196
Registriert: Sonntag 1. Januar 2006, 20:12
Wohnort: aus dem hohen Norden....

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:
daniels7
User
Beiträge: 15
Registriert: Sonntag 30. Dezember 2007, 12:51

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.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Dieser Abbruch muss doch mit irgendeiner Form von Bedingung zusammenhängen, sonst macht er meiner Meinung nach keinen Sinn.
daniels7
User
Beiträge: 15
Registriert: Sonntag 30. Dezember 2007, 12:51

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.
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.
daniels7
User
Beiträge: 15
Registriert: Sonntag 30. Dezember 2007, 12:51

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?
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
Zuletzt geändert von BlackJack am Montag 31. Dezember 2007, 12:28, insgesamt 1-mal geändert.
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

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.
mfg

Thomas :-)
windner
User
Beiträge: 76
Registriert: Freitag 19. Oktober 2007, 11:25

Du brauchst also eine Abbruchbedingung. Wenn diese Eintritt kommt es zu keinem weiteren rekursiven Aufruf mehr.
Hatte er denn keine?
BlackJack

Siehst Du da oben eine?
windner
User
Beiträge: 76
Registriert: Freitag 19. Oktober 2007, 11:25

Ja, eine invertierte.
Nämlich rekursiert er nur, wenn if text[x:y]=='\\' wahr ist (Zeile 7).
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.
Antworten