Methoden Hanoi - Anzahl der Bewegungen

  • Themenstarter Themenstarter Fury
  • Beginndatum Beginndatum
F

Fury

Gast
Hallo liebe Javafreunde,

ich habe ein Problem mit meinem Hanoiprogramm und zwar:
Ich will einen Zähler mit einbauen, der jede Verschiebung zählt und am Ende
die Anzahl der Verschiebungen ausgibt. Leider weiß ich nicht, wie ich das am besten machen soll,
da meine Hanoimethode rekursiv ist und sich ja immerwieder selbst aufruft. Wie kann ich einen
Zähler am besten einbaun ?

Am Anfang dachte ich, dass ich am besten eine int zahl mitübergebe und die bei jedem weiteren
Aufruf der Methode um 1 erhöhe, aber dann liefert mir irgendwie keine richtigen Ausgaben.

Java:
public class hanoi2 {
	public static void bewege(int n, char start, char lager, char ziel)
	{
		if(n == 1)
			System.out.println("Scheibe "+n+" von "+start+" nach "+ziel);
		else
		{
			bewege(n-1,start,ziel,lager);
			System.out.println("Scheibe "+n+" von "+start+" nach "+ziel);
			bewege(n-1,lager,start,ziel);
		}
	}
	
	public static void main(String[] args)
	{
		int n = 15;
		bewege(n,'A','B','C');
	}
}
 
Wenn eine Scheibe bewegt wird, gibt es eine Bewegung. Wenn n Scheiben bewegt werden müssen, dann gibt es so viele Bewegungen, wie für das Bewegen von n-1 Scheiben nötig sind, dann noch eine, und dann nochmal so viele, wie für das Bewegen von n-1 Scheiben nötig sind.

Poste mal deine bisherigen Versuche.
 
Bagatellen werden gleich erledigt, auf Wunsch wird gehext, Wunder dauern etwas länger ...

Klassennamen bitt mit einen Grossbuchstaben am Anfang.

Java:
public class Hanoi {

	private static int counter = 0;

	public static void bewege(int n, char start, char lager, char ziel) {
		if(n == 1) {
			System.out.println("Scheibe "+n+" von "+start+" nach "+ziel);
		} else {
			bewege(n-1,start,ziel,lager);
			System.out.println("Scheibe "+n+" von "+start+" nach "+ziel);
			counter += 1;
			bewege(n-1,lager,start,ziel);
		}
	}

	public static void main(String[] args) {
		int n = 15;
		bewege(n,'A','B','C');
		System.out.println("Es wurden " + counter + " Züge ausgeführt");
	}
}
 
Oh - ihr passt ja wirklich auf! Gratulation!!!
DIE Herausforderung für euch ist es nun entweder die Initalisierung zu ändern oder das ++ zu verschieben - tja - ich nehme euch doch nicht alles ab
 

Zurück
Oben