Autor Beitrag
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 526

WinXP Home & Professional
C, C++, Delphi
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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 :P
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 414
Erhaltene Danke: 23



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 526

WinXP Home & Professional
C, C++, Delphi
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: 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... :wink:

Cu,
Udontknow
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mo 13.03.06 16:34 
user profile iconDaRkFiRe 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 :gruebel: .

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:
ausblenden 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 :mrgreen: )

ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mo 13.03.06 16:38 
user profile iconUdontknow 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mo 13.03.06 19:10 
user profile iconF34r0fTh3D4rk hat folgendes geschrieben:
gibts auch typische beispiele für indirekte rekursion ?

Wasndat?

_________________
Na denn, dann. Bis dann, denn.
DaRkFiRe
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 526

WinXP Home & Professional
C, C++, Delphi
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mo 13.03.06 19:43 
Zitat:
Wusste gar nicht, dass eine Endlosschleife terminiert. Begründe das bitte.


Tut sie eben nicht! :lol:

Da eine Rekursion irgendwann mit einer EStackoverflow-Meldung abgebrochen wird, beendet diese sich "eher"... Ja, ich weiss, die Pointe ist mau. :wink:

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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 526

WinXP Home & Professional
C, C++, Delphi
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Di 14.03.06 09:15 
user profile iconGrenzgaenger 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Di 14.03.06 15:11 
ich brauche noch einen guten syntax highlighter für word 2000, gibts irgendwo sowas ?
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Di 14.03.06 15:25 
Bei den Gexperts ist einer mit drin, der unterstützt HTML,RTF,Zwischenablage