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


Zuletzt bearbeitet von F34r0fTh3D4rk am So 08.05.05 19:27, insgesamt 4-mal bearbeitet
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: 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. :D

_________________
"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 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: Sa 07.05.05 16:47 
jo ^^ man ich will aber was mit rekursion machen :D
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Sa 07.05.05 16:51 
Dann programmier einen Routenplaner 8)

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
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: 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) :wink:
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: So 08.05.05 09:33 
Rekursion üben: Türme von Hanoi.
feuerwaran
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: So 08.05.05 09:42 
Die Türme von Hanoi kann man auch iterativ lösen :oops:
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: 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 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: 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 :roll:
Die letzte Tröte
Hält's aus hier
Beiträge: 2

Win XP
6.0
BeitragVerfasst: 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 :D
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: 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 :idea:

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

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: So 08.05.05 14:22 

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
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: So 08.05.05 14:28 
ach das teil ^^ :D ich überleg grad wie ich das mache, hmm schwiegrig, ich glaub ich probier des erstmal mit geldstücken auf meinem schreibtisch :lol:

auf meinem schreibttisch bin ich jetzt so weit:
ausblenden Quelltext
1:
2:
3:
4:
5:
------1------
------2------
5-----3-----4

A-----B-----C


ok jetzt ist es so:
ausblenden 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 ^^ :D
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: 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 :lol: aber so schwer ist es glaube ich net
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: 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:
ausblenden 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);
// Bewege N Scheiben von aFromField nach aToField. Dabei wird aUsingField als Hilfsfeld benutzt.
Begin
// Verschiebe erstmal N-1 Scheiben von 'From' nach 'Using' mit Hilfe von 'To'
// Natürlich nur, wenn überhaupt noch ein Turm da ist
  If N>1 Then
    MoveTower (N - 1, aFromField, aUsingField, aToField);

// Bewege nun die unterste Scheibe von 'From' nach 'To'
  Writeln(aFromField,'->',aToField);

// Und zu guter Letzt: Verschiebe die N-1 Scheiben von 'Using' nach 'To' mit Hilfe von 'From'
  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); // Bewege N Scheiben von 1 nach 3 mit Hilfe von 2.
End.
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: So 08.05.05 15:41 
ja danke :D
ausblenden 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), 132);
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: 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)