Hallo,
müsst ihr nicht umbedingt lesen :
bin momentan in der 11. und habe einen Info-Lehrer der gerade von der Uni gekommen ist (dort in lehrender Funktion). Er ist also "etwas" schnell und meinte wir sollen uns in den Ferien doch mal bitte die ausgeteilten Blätter zu Landauschen Symbolen, Türmen von Hanoi und Ackermannfunktion etc. durcharbeiten. Problem ist nur, dass diese Blätter sehr schwer zu konsumieren sind, wenn man noch nie mit rekursiver Programmierung etc. zu tun hatte, zudem sind die zum großen Teil einfach nur aus Wikipedia rauskopiert. Muss noch hinzufügen, dass "wir" die Türme von Hanoi mal im Schnelldurchlauf "besprochen" haben, jedoch ging das so schnell, dass keiner im Info-Kurs mitkam zumal das sowieso eher Uni-Stoff (bzw. LK-Stoff) ist
Ich hab schon Wikipedia und Google zu Rekursiver Programmierung und Türme von Hanoi befragt und auch einiges gefunden. Wie das Prinzip der Rekursivität funktioniert hab ich so einigermaßen anhand der Fakultäts-Funktion verstanden. Hab auch schon mal C++ (weniger) und PHP (deutlich mehr) geschrieben, bin also kein totaler newbie, trotzdem raff ichs genauso wenig wie der Rest vom Info-kurs.
Türme von Hanoi:
Kurz zu den Regeln.. alle Scheiben müssen von einer Säule zur anderen, dabei darf immer nur eine bewegt werden und es darf niemals eine größere auf einer kleineren liegen
[Blockierte Grafik: http://upload.wikimedia.org/wikipedia/comm…er_of_Hanoi.gif]
grundsätzlich hab ich das verstanden .. hier kann man immer einen Schritt zurückgehen (eine Ebene höher) muss allerdings immer wieder Hilfssäule und Zielsäule wechseln.
Nun habe ich einige Code-Schnipsel gefunden
PROCEDURE MoveDisks(n: INTEGER; from, to, help: Tower);
BEGIN
IF n > 0 THEN
MoveDisks(n - 1, from, help, to);
MoveDisk(from, to);
MoveDisks(n - 1, help, to, from);
END;
END MoveDisks;
oder
von Wikipedia:
funktion bewege (Zahl i, Stab a, Stab b, Stab c) {
falls (i > 0) {
bewege(i-1, a, c, b);
verschiebe oberste Scheibe von a nach c;
bewege(i-1, b, a, c);
}
}
und dazugehörig die Aufführung des Codes mit 3 Scheiben und a=1, b=2,c=3 (als Erstebelegung?):
bewege(3,1,2,3) {
bewege(2,1,3,2) {
bewege(1,1,2,3) {
bewege(0,1,3,2){};
verschiebe oberste Scheibe von 1 nach 3;
bewege(0,2,1,3){};
};
verschiebe oberste Scheibe von 1 nach 2;
bewege(1,3,1,2){
bewege(0,3,2,1){};
verschiebe oberste Scheibe von 3 nach 2;
bewege(0,1,3,2){};
};
};
verschiebe oberste Scheibe von 1 nach 3;
bewege(2,2,1,3){
bewege(1,2,3,1){
bewege(0,2,1,3){};
verschiebe oberste Scheibe von 2 nach 1;
bewege(0,3,2,1){};
};
verschiebe oberste Scheibe von 2 nach 3;
bewege(1,1,2,3){
bewege(0,1,3,2){};
verschiebe oberste Scheibe von 1 nach 3;
bewege(0,2,1,3){};
};
};
};
Alles anzeigen
:wein::wein::wein::wein::wein:
ich verstehe schon die funktion bewege nicht..
sie erhält 4 Argumente Anzahl der Scheiben (oder die höchste Anzahl an Scheiben auf einer Stange?)
und Start-,Hilfs- und Zielstange.
wieso hat die Funktion zusätzlich das Hilfsstangen-Argument?
vielleicht könnte mir jemand mal den Code aufschreiben mit 2 Scheiben
so wie bei der fakultät (wenns geht), denn irgendwie schaffe ich die Verbindung zwischen (rein mathematisch) Fakültät und den (abstrakt) Türmen nicht :
bewege 0 s z h = []bewege n s z h = bewege (n-1) s h z ++ [(s,z)] ++ bewege (n-1) h z s
ähnelt
fak(1)=1
fak(n)=fak(n-1)*n
=> fak(3)=fak(2)*3
=> fak(3)=fak(1)*2*3
=> fak(3)=1*2*3=6
PROCEDURE MoveDisks(n: INTEGER; from, to, help: Tower);
BEGIN
IF n > 0 THEN
MoveDisks(n - 1, from, help, to);
MoveDisk(from, to);
MoveDisks(n - 1, help, to, from);
END;
END MoveDisks;
für n=2
1,from,help,(to) // bewegt kleinste scheibe zur stange 2.
from,to // bewegt größte scheibe zur zielstange 3.
1,help,to,(from) // bewegt kleinste scheibe zur stange 3.
eigentlich weiß ich schon, dass das falsch ist.. den schließlich bewegt nur dieses MoveDisk(from, to); die Scheibe tatsächlich
dabei bräuchte ich doch die beiden teile die ich eingeklammert habe gar nicht?
:wein::wein:
Bitte helft mir...
Vielen Dank
PS: hab noch nen guten Link gefunden.. versuche gerade den auszuwerten:http://wendtstud1.hpi.uni-potsdam.de/labor/Beispiel…erme_von_Hanoi/
mh.. mir sagt das diagram nicht so viel.. ich versuchs nochmal mit http://www.swisseduc.ch/informatik/pro…sion/index.html zum Thema Rekursion
flaxx