Beiträge von flaxx

    also ich glaub ich habs verstanden, Problem war wohl, dass ich das mit dem Selbstaufrufen nicht nachvollzogen hatte.. Jetzt kann ich zumindest das Script von Wikipedia halbwegs nachvollziehen. Würde aber wohl kaum selbst auf die Rekursionsvorschrift kommen.

    Kann jemand erklären wie man die Rekursionsvorschrift entwickelt?

    Hallo,

    müsst ihr nicht umbedingt lesen :rolleyes::
    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


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

    Code
    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?):

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

    Code
    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

    Code
    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