hanoi Rekursion



  • void trageScheibe(char saeuleVon, char saeuleNach)
      {
       printf(" Trage eine Scheibe von Turm %c nach Turm %c\n",
              saeuleVon,
              saeuleNach);
      }
    
    void bewegeTurm(int  scheiben,   /* Anzahl der Scheiben */
                    char saeuleVon,  /* von Saeule */
                    char saeuleNach, /* nach Saeule */
                    char saeuleVia)  /* ueber Saeule */
      {
    
    	  if(scheiben==1)trageScheibe( saeuleVon,saeuleNach); 
    
    	  else{
    
    	   bewegeTurm( scheiben-1,saeuleVon,saeuleVia,saeuleNach);
           trageScheibe( saeuleVon,saeuleNach); 
    	   bewegeTurm(scheiben-1,  saeuleVia,saeuleNach,saeuleVon);
    
    	  }
    
      }
    

    Kann mir mal einer erklären wie der hanoi Algorithmus für
    2 Scheiben funktioniert ?



  • main fehlt noch 🙂

    void main( void)
      {
       int scheibenZahl;
       printf("Geben Sie die Anzahl der Scheiben ein: ");
       scanf("%d", &scheibenZahl);
       bewegeTurm(scheibenZahl, 'A', 'B', 'C');
      }
    

  • Mod

    blurry33 schrieb:

    Kann mir mal einer erklären wie der hanoi Algorithmus für
    2 Scheiben funktioniert ?

    Ist das ein Scherz?

    Von Säule 1 zu Säule 2:
    Säule:        1      2       3
    Schritt 1:   AB
    Schritt 2:   A               B
    Schritt 3:          A        B
    Schritt 4:          AB
    


  • nee kein Scherz.

    Ich komm mal wieder mit der Rekursion nicht zurecht.



  • naja ok hab meinen Fehler entdeckt 🙂



  • was mir jetzt erst auffällt

    1. bewegeTurm( scheiben-1,saeuleVon,saeuleVia,saeuleNach);
    2. trageScheibe( saeuleVon,saeuleNach); 
    3. bewegeTurm(scheiben-1,  saeuleVia,saeuleNach,saeuleVon);
    

    Wenn der Prozessor die Funktionen auf den stack legt muss er erst die
    3 und dann die 2. drauflegen. Würde die 3. ganz oben liegen wäre die
    Reihenfolge ja falsch. Er muss aber immer erst die 2. und dann die 3 abarbeiten.

    Wenn man sich das selber auf papier zu erklären versucht neigt man
    ja dazu von oben nach unten einfach abzuschreiben. Und rollt man das ganze
    dann von hinten auf , wäre das falsch .

    Danke !


Anmelden zum Antworten