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

Rekursion beenden

Beitragvon daniels7 » Montag 31. Dezember 2007, 11:22

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

Re: Rekursion beenden

Beitragvon Andy » Montag 31. Dezember 2007, 11:32

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

Beitragvon daniels7 » Montag 31. Dezember 2007, 11:39

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

Beitragvon Zap » Montag 31. Dezember 2007, 11:47

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

Beitragvon daniels7 » Montag 31. Dezember 2007, 11:55

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

Beitragvon BlackJack » Montag 31. Dezember 2007, 12:05

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

Beitragvon daniels7 » Montag 31. Dezember 2007, 12:23

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

Beitragvon BlackJack » Montag 31. Dezember 2007, 12:27

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

Beitragvon Python 47 » Montag 31. Dezember 2007, 12:28

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

Beitragvon windner » Mittwoch 2. Januar 2008, 11:45

Du brauchst also eine Abbruchbedingung. Wenn diese Eintritt kommt es zu keinem weiteren rekursiven Aufruf mehr.

Hatte er denn keine?
BlackJack

Beitragvon BlackJack » Mittwoch 2. Januar 2008, 12:08

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

Beitragvon windner » Mittwoch 2. Januar 2008, 12:12

Ja, eine invertierte.
Nämlich rekursiert er nur, wenn if text[x:y]=='\\' wahr ist (Zeile 7).
BlackJack

Beitragvon BlackJack » Mittwoch 2. Januar 2008, 12:36

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.

Wer ist online?

Mitglieder in diesem Forum: de_tom