Autor |
Beitrag |
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 13.03.06 15:10
Hallo, ich habe vor eine Facharbeit über Rekursive Algorithmik zu schreiben.
Habt ihr Ideen was man da so einbauen könnte, eventuell Problemstellungen etc ?
Klar ist Einleitung, dann Arten (Backtracing etc), Beispiele, Beispielprogramme (Hanoi oder so), aber was noch ?
Vielen Dank schonmal 
|
|
DaRkFiRe
      
Beiträge: 526
WinXP Home & Professional
C, C++, Delphi
|
Verfasst: Mo 13.03.06 15:30
Na wirst sicherlich auf die Abbruchbedingung zu sprechen kommen müssen. Ohne AbbB keine Terminiertheit der Rekursion -> Stackoverflow, wirste ja wissen.
_________________ Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
|
|
F34r0fTh3D4rk 
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 13.03.06 15:37
jo das ist klar, aber dann bräuchte ich nochmehr vorteile nachteile etc, vereinfachung usw ist klar, aber ich muss immerhin 12 seiten text vollkriegen 
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mo 13.03.06 15:45
Du kannst ja mal ganz anders rangehen. Ist das menschliche Gehirn überhaupt geeignet rekursive Programmierung nachzuvollziehen?
Ich erinnere mich an eine Anwendung mit einem 4-fachen Gruppenwechsel, den ich rekursiv programmiert habe. Trotz Kommentierung war das später ungeheuer schwierig nachzuvollziehen. War aber auch nicht erforderlich, da es einwandfrei lief.
|
|
Tastaro
      
Beiträge: 414
Erhaltene Danke: 23
|
Verfasst: Mo 13.03.06 15:55
@jasocul: Das kenn ich. Ich geh an Rekursionen immer so heran:
Schreiben, freuen dass es läuft und bloß nicht versuchen zu überlegen, was der Computer da alles tut.
Beste Grüße
Tastaro
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Mo 13.03.06 15:57
Hallo,
ich hatte mal vor langer Zeit dieses Tutorial geschrieben, da findest du bestimmt ein paar Anreize.
Cu,
Udontknow
|
|
DaRkFiRe
      
Beiträge: 526
WinXP Home & Professional
C, C++, Delphi
|
Verfasst: Mo 13.03.06 15:58
Na der Vorteil von Rekursion ist: sie sind ja obligatorisch, wenn die Anzahl der Durchläufe von vornherein nicht bekannt ist. Beispiel: Scannen einer Ordnerstruktur (unter FAT).
Ich weiß, dass man alle iterativen Algorithmen auch rekursiv lösen kann, aber nicht jeder rekursive Algo ist iterativ lösbar.
Nachteil: Speicherverbrauch (Stack + u.U. globale Variablen); Möglichkeit, dass Algo nicht terminiert (AbbB). Gibt sicher noch mehr - soll ja auch nur als Denkanstoß gelten.
Guck erstma, wieviel Seiten Du mit eigenem Wissen vollkriegst und dann schick mal PDF.
Facharbeit muss doch mit Deckblatt und Inhaltsverzeichnis sein, oder!? Haste schonmal 2 Blätter weg (4 Seiten!?).
_________________ Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Mo 13.03.06 16:25
Zitat: | Ich weiß, dass man alle iterativen Algorithmen auch rekursiv lösen kann, aber nicht jeder rekursive Algo ist iterativ lösbar. |
Öhm, eine Rekursion wird ja vom Prozessor im Endeffekt immer unter Zuhilfenahme von Speicher (Aufruf-Stack) iterativ umgesetzt. Wird da nicht eher umgekehrt ein Schuh draus?
Zitat: | Nachteil: Speicherverbrauch (Stack + u.U. globale Variablen); Möglichkeit, dass Algo nicht terminiert (AbbB). Gibt sicher noch mehr - soll ja auch nur als Denkanstoß gelten. |
Eine Rekursion ohne Abbruch-Bedingung terminiert eher als eine Endlos-Schleife...
Cu,
Udontknow
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mo 13.03.06 16:34
DaRkFiRe hat folgendes geschrieben: |
Ich weiß, dass man alle iterativen Algorithmen auch rekursiv lösen kann, aber nicht jeder rekursive Algo ist iterativ lösbar. |
Falsch! ALLE rekursiven Algorithmen sind iterativ lösbar! Ich frage mich, wieso dieser Schmarrn immer wieder verbreitet wird  .
Ich würde (wegen der Würze) die Türme von Hanoi und/oder das 8-Dame Problem als exemplarisches Beispiel für rekursive Lösungswege bzw. Backtracking verwenden. Eine Andere Möglichkeit ist 'FloodFill': Ausfüllen eines geschlossenen Bereiches einer Bitmap mit einer bestimmten Farbe, wobei der Rand durch eine andere Farbe definiert ist:
Quelltext 1: 2: 3: 4: 5: 6: 7:
| FloodFill (X,Y): Wenn X,Y innerhalb der Bitmap und Bitmap (X,Y)=Leer Dann Bitmap (X,Y) = Zielfarbe FloodFill (X-1,Y) FloodFill (X+1,Y) FloodFill (X,Y-1) FloodFill (X,Y+1) |
Und eigentlich ist Rekursivität ganz einfach und entspricht auch unserer Denkstruktur: Ein Problem wird auf einen einzigen Schritt reduziert, nämlich den, der die Lösung ein bisschen näher bringt. Eigentlich ganz einfach. Das ist zwar eine Kunst (weil es so simpel ist), und verlangt ein wenig Übung, aber widernatürlich ist das nicht (finde ich, aber vielleicht bin ich ja auch pervers  )
Quelltext 1: 2: 3: 4: 5: 6:
| LaufeVon (A ,B): Wenn A<>B dann Neuer Punkt X = Gehe von A einen Schritt in Richtung B LaufeVon (X,B) Sonst Ausgabe"Angekommen" |
Oder, noch blöder:
Quelltext 1: 2: 3: 4: 5:
| Addiere (A,B,C): // C = A + B, B>0 Wenn B>0 Dann Addiere (A + 1,B - 1,C) Sonst C = A |
Wir haben immer ein Abbruchkriterium, einen kleinen Teilschritt und den rekursiven Aufruf.
Beim *Backtracking* (Try and Error, Versuch und Irrtum) verhält sich das ähnlich, nur das ich den Schritt wieder rückgängig machen muss. Damit eignet sich das Backtracking nicht für 'Trapdoors', also für Operationen, die nur in eine Richtung funktionieren.
Rekursivität ist natürlich insbesondere bei rekursiven Datenstrukturen (Bäumen, Graphen allgemein etc.) sinnvoll.
_________________ Na denn, dann. Bis dann, denn.
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mo 13.03.06 16:38
Udontknow hat folgendes geschrieben: | Öhm, eine Rekursion wird ja vom Prozessor im Endeffekt immer unter Zuhilfenahme von Speicher (Aufruf-Stack) iterativ umgesetzt. |
Na logisch. Das reicht, um den zu beweisen, das jeder rekursive algo in einen iterativen (eventuell 1000x komplizierteren) Algo zu transformieren.
Es ist aber viel interessanter, einen rekursiv formulierten Algorithmus in einen (auch von der Komplexität=Zeilenanzahl) äquivalenten iterativen Algorithmus zu verwandeln. DAS ist kniffelig und nicht immer ohne weiteres lösbar. Paradebeispiel: Ackermann. Da ist die rekursive Definition irgendwie 3 Zeilen lang, die iterative aber so um die 50...
_________________ Na denn, dann. Bis dann, denn.
|
|
F34r0fTh3D4rk 
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 13.03.06 17:03
wow vielen dank schonmal, da sind einige gute sachen dabei, die mich gleich inspiriert haben.
vor allem das mit der gehirnleistung, ich weiß es selbst, ich wollte die türme von hanoi coden, iterativ, das waren ne menge zeilen code, dann finde ich den rekursiven algo und das war ein zwei zeiler, es hat mich schon einige zeit gekostet den zu verstehen, weil er simpel ist, aber alles regeln der türme befolgt, schlichtweg genialste algorithmik.
gibts auch typische beispiele für indirekte rekursion ?
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mo 13.03.06 19:10
F34r0fTh3D4rk hat folgendes geschrieben: | gibts auch typische beispiele für indirekte rekursion ? |
Wasndat?
_________________ Na denn, dann. Bis dann, denn.
|
|
DaRkFiRe
      
Beiträge: 526
WinXP Home & Professional
C, C++, Delphi
|
Verfasst: Mo 13.03.06 19:25
Wusste gar nicht, dass eine Endlosschleife terminiert. Begründe das bitte.
Dass man eine Rekursion auch iterativ lösen kann, sind selbst lt. wikipedia (okay, muss ja nicht stimmen) nur Spezialfälle.
Natürlich geht das mit dem Stack, indem man den PC "nachempfindet". Rekursion sind ja im PC wie schon gesagt: Iterationen mit einem Stack.
_________________ Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Mo 13.03.06 19:43
Zitat: | Wusste gar nicht, dass eine Endlosschleife terminiert. Begründe das bitte. |
Tut sie eben nicht!
Da eine Rekursion irgendwann mit einer EStackoverflow-Meldung abgebrochen wird, beendet diese sich "eher"... Ja, ich weiss, die Pointe ist mau.
Was die Wikipedia angeht:
Zitat: | Manche Programmiersprachen (insbesondere in der Funktionalen Programmierung) erlauben keine Iteration, sodass immer die rekursive Umsetzung gewählt werden muss. |
Das ändert nichts daran, daß dem PC als Rechenmaschine gar nichts anderes übrig bleibt, als iterativ vorzugehen.
Cu,
Udontknow
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 14.03.06 01:38
DaRkFiRe, jede rekursion kann man auch iterativ auflösen, aber nicht jede iteration auch rekursiv.... das sind grundverschiedene ansätze....
PS: F34r0fTh3D4rk: wenn du was über rekursion lesen willst, so empfehle ich dir die klassiker der algo. theorie... da findest du spielend ein paar 1000 seiten... die du lesen kannst.. und für deine facharbeit werden dann auch noch 10 bis 20 seiten übrig bleiben.. also ruhig mal zur biblio gehen,...
|
|
DaRkFiRe
      
Beiträge: 526
WinXP Home & Professional
C, C++, Delphi
|
Verfasst: Di 14.03.06 02:28
Jau, dann hab ich das vertauscht - und das mit der Endlosschleife hab ich dann wohl nur überflogen. Ich schieb das jetzt mal auf meinen nicht durchgängigen 4-stündigen Schlaf letzte Nacht.
_________________ Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Di 14.03.06 09:15
Grenzgaenger hat folgendes geschrieben: | DaRkFiRe, jede rekursion kann man auch iterativ auflösen, aber nicht jede iteration auch rekursiv.... das sind grundverschiedene ansätze.... |
Wieso könnte es einen iterativen Algorithmus geben, die man nicht rekursiv lösen kann? Das kann nicht sein, weil die 'Tail recursion' eine äquivalente Umsetzung einer Aufzählung ('Iteration') ist.
_________________ Na denn, dann. Bis dann, denn.
|
|
digi_c
      
Beiträge: 1905
W98, XP
D7 PE, Lazarus, WinAVR
|
Verfasst: Di 14.03.06 10:24
Vielleicht magst du darauf eingehen, wie man mit rekursiven Funktionen sehr schön komplexe Grafiken machen kann.
Sowas wird z.B. bei Demos genutzt um die Programme klein zu halten.
www.educeth.ch/infor.../leitprog/rekursion/
|
|
F34r0fTh3D4rk 
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Di 14.03.06 15:11
ich brauche noch einen guten syntax highlighter für word 2000, gibts irgendwo sowas ?
|
|
digi_c
      
Beiträge: 1905
W98, XP
D7 PE, Lazarus, WinAVR
|
Verfasst: Di 14.03.06 15:25
Bei den Gexperts ist einer mit drin, der unterstützt HTML,RTF,Zwischenablage
|
|
|