Autor |
Beitrag |
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Sa 07.05.05 15:50
hallo, ich möchte gerne etwas mit Rekursion machen, weiß aber nicht was ?
Ich wollte des nämlich etwas üben, bevor ich wieder was größeres damit mache.
Die "Rekursiv"-Suche die keine war hab ich dann mal gelöscht 
Zuletzt bearbeitet von F34r0fTh3D4rk am So 08.05.05 19:27, insgesamt 4-mal bearbeitet
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Sa 07.05.05 16:47
Wie Fear gerade festgestellt hat, braucht er gar keine Rekursion, da er ja die Schleife hat ^^
Damit wäre dieses Problem gelöst. 
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Zuletzt bearbeitet von GTA-Place am Sa 07.05.05 16:47, insgesamt 1-mal bearbeitet
|
|
F34r0fTh3D4rk 
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Sa 07.05.05 16:47
jo ^^ man ich will aber was mit rekursion machen 
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Sa 07.05.05 16:51
Dann programmier einen Routenplaner 
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
F34r0fTh3D4rk 
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Sa 07.05.05 16:57
nee lassma stecken, ich brauch was praktischeres (obwohl sone eigene stadt entwerfen und dafür nen routenplaner basteln, wäre geil) 
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: So 08.05.05 09:33
Rekursion üben: Türme von Hanoi.
|
|
feuerwaran
      
Beiträge: 20
|
Verfasst: So 08.05.05 09:42
Die Türme von Hanoi kann man auch iterativ lösen 
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: So 08.05.05 12:03
Ach was (stand da nicht: "Rekursion üben:..."?)
Man kann *Alles* iterativ lösen, und Rekursion ist eigentlich überflüssig.
Aber die rekursive Lösung ist i.a. 'eleganter', weil sie direkt den Lösungsansatz implementiert. Hier ging es ums 'Üben', und die Türme von Hanoi sind (für mich) das schönste Beispiel für die Eleganz von Rekursion.
|
|
feuerwaran
      
Beiträge: 20
|
Verfasst: So 08.05.05 12:12
jo  Er könnte auch die Festplatte rekursiv durchsuchen oder sowas. Da hat er bestimmt auch seinen Spaß dran.
|
|
F34r0fTh3D4rk 
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: So 08.05.05 13:44
die türme von hanoi kenn ich garnet, hab des sierpinski dreieck mal gemacht, die türme von hanoi, wo kann ich dazu was finden ? klingt interessant 
|
|
Die letzte Tröte
Hält's aus hier
Beiträge: 2
Win XP
6.0
|
Verfasst: So 08.05.05 13:47
Man kann alles Iterative Rekursiv lösen, aber nicht alles Rekursive Iterativ...oder versuch ma die Koch Kurve Iterativ auf die beine zu stellen 
|
|
F34r0fTh3D4rk 
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: So 08.05.05 13:53
man kann rekursion eigentlich doch so gut wie immer durch schleifen ersetzen oder nicht ? mich interessieren jetzt aber mal die türme von hanoi
EDIT: Man kann alles rekursive iterativ lösen, da es immer eine maximale anzahl von iterationen in einer rekursion gibt, beschränkt durch die hardware. (endlosschleifen gibt es nur in der theorie)
Zuletzt bearbeitet von F34r0fTh3D4rk am Di 14.03.06 15:39, insgesamt 1-mal bearbeitet
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: So 08.05.05 14:18
Türme von Hanoi:
Stell Dir drei Felder vor. A B und C.
Auf A steht ein Stapel mit N sich noch oben verkleinernden Scheiben.
Aufgabe: Verschiebe den Stapel von A nach C.
Regel 1: Du darfst immer nur eine Scheibe bewegen.
Regel 2: Eine Scheibe darf nicht auf einer kleineren Scheibe liegen.
Lösungstipp:
Um alle Scheiben von A nach C zu verschieben, verschiebe einfach (unter Beibehaltung der Regeln) irgendwie den Stapel (bis auf die unterste Scheibe) von A nach B, dann bewege die unterste Scheibe von A nach C und abschließend den Stapel, der jetzt auf B liegt, von B nach C.
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 08.05.05 14:22
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
F34r0fTh3D4rk 
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: So 08.05.05 14:28
ach das teil ^^  ich überleg grad wie ich das mache, hmm schwiegrig, ich glaub ich probier des erstmal mit geldstücken auf meinem schreibtisch
auf meinem schreibttisch bin ich jetzt so weit:
Quelltext 1: 2: 3: 4: 5:
| ------1------ ------2------ 5-----3-----4
A-----B-----C |
ok jetzt ist es so:
Quelltext 1: 2: 3: 4: 5: 6:
| -----1----- -----2----- -----3----- -----4----- -----5----- A----B----B |
naja sagen wir geschaft ^^
Das System ist etwas kompliziert, das muss ich in meinem
Kopf noch in Code umwandeln, aber es ist lustig ^^ 
|
|
F34r0fTh3D4rk 
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: So 08.05.05 14:44
ich kriegs auch in 30 sekunden hin, das system ist in mir drin, ich versteh auch wie ichs machen muss, aber in code .... ??? muss ich wohl noch etwas denken  aber so schwer ist es glaube ich net
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 08.05.05 14:49
1. Scheibe 1 auf B
2. Prüfen wo Scheibe 2 hin darf -> auf C
3. Prüfen wo Scheibe 3 hin darf -> nicht bei B und nicht bei C -> Kleinste Scheibe bei B oder C suchen -> B auf C
...
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: So 08.05.05 15:28
Achtung, hier ist eine Lösung...
Wie war das?
Um N Scheiben zu verschieben:
Verschiebe erstmal N-1 Scheiben woandershin
Dann die unterste zum Ziel
Und dann die N-1 Scheiben von woandershin zum Ziel.
Aha. 'woanders' ist interessant. Wir haben ja drei Felder. A, B und C (oder 1,2 und 3). Wenn wir von A nach C wollen, ist 'B' eben das 'woanders'. Gut. Nochmal:
Verschiebe Scheiben von A über B nach C:
1. Verschiebe N-1 Scheiben von A über C nach B.
2. Bewege die verbliebene Scheibe von A nach C.
3. Verschiebe N-1 Scheiben von B über C nach A.
Oha. Das riecht nach Rekursion ('Verschiebe X Scheiben von ....'). Das passt. Also:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| Program TowersOfHanoi; Procedure MoveTower (N : Integer; aFromField, aToField, aUsingField : Integer); Begin If N>1 Then MoveTower (N - 1, aFromField, aUsingField, aToField);
Writeln(aFromField,'->',aToField);
If N>1 Then MoveTower (N - 1, aUsingField, aToField, aFromField); End;
Procedure Main; Var N : Integer;
Begin Write ('Türme von Hanoi. Wie hoch ist der Turm [1-100] ? > '); ReadLn(N); MoveTower (N,1,3,2); End. |
|
|
F34r0fTh3D4rk 
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: So 08.05.05 15:41
ja danke
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| Procedure MoveTower(N : Integer; aFromField, aToField, aUsingField : Integer); Begin If N > 1 Then MoveTower (N - 1, aFromField, aUsingField, aToField); Form1.ListBox1.Items.add(inttostr(aFromField) + ' nach Feld ' + inttostr(aToField) + ' bewegen'); If N > 1 Then MoveTower (N - 1, aUsingField, aToField, aFromField); End;
procedure TForm1.Button1Click(Sender: TObject); begin form1.ListBox1.clear; MoveTower(strtoint(edit1.text), 1, 3, 2); end; |
Die Macht von Rekursion ist gewaltig.
Iterativ ist das schon ne ganz schöne arbeit mehr (hatte des gerade mit nem 2d array und dann würde erst immer geprüft)
Zuletzt bearbeitet von F34r0fTh3D4rk am So 08.05.05 16:13, insgesamt 1-mal bearbeitet
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 08.05.05 15:49
Für 20 Scheiben braucht er 1.048.000 Runden.
Für 30 Scheiben braucht er 1.070.000.000 Runden.
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|