Rekursiver Aufruf von Waagengewichten

gregstar65

Mitglied
Hallo,

ich habe eine Aufgabe zur Rekursion, die ich nicht im Stande bin zu lösen. Es war eine Klausuraufgabe, die ich am vergangenen Samstag geschrieben habe.

Man stelle sich eine Waage vor und soll die entsprechenden Gegengewichte ermitteln. Der gegebene Code sah wie folgt aus:
Code:
public class Gegengewichte{

   public static void ermittle(gewichte, usw.){
       // hier sollte die rekursive Funktion erweitert werden


   }

   public static void main(String[] args){

      int[] gewichte = {22, 6, 4, 18};
      ermittle( gewichte, usw.);

Auf meine Nachfrage, ob der unklaren Aufgabenstellung habe ich gesagt bekommen, dass es einzig darum ginge herauszufinden, welche Gewichtskombinationen sich aus den vier Gewichten ergeben. Die sollten dann auch noch ausgegeben werden.

Meine Idee einen Baum mit einer Wurzel und je nach Tiefe (mit n=3, n=2, n=1) laufen zu lassen, ist jedenfalls nicht richtig. Ich habe zuhause weiter probiert, komme aber auf keinen Ansatz. Mein bisheriges Codefragment füge ich jetzt mal ein:

Code:
package rekursion;

public class Gegengewicht {

	
	public static void main(String[] args) {
		int[] gewichte = {22,6,4,18};
		Gegengewicht.ermittle(gewichte, gewichte.length);

	}

	private static void ermittle(int[] gewichte, int length) {
		// Rekursionsanfang
		if(length<0) {
			for(int i=0; i<gewichte.length; i++){
				System.out.print(gewichte[i]+" - ");
			}
		}// Rekursionsschritt
		else {
//                 Meine Ideen, leider ohne Wirkung, vermutlich fehlen Parameter:
//			ermittle(gewichte, length-1);
//	oder: 	ermittle(gewichte, length);
		}
	}
}
Das usw. steht übrigens nicht für einen festen Übergabeparameter, sondern es können auch mehr sein.

Wer Spass und Zeit hat, kann sich das Problem gerne antun. Ich habe die Aufgabe jedenfalls nicht bewältigt. Das muss aber nichts heißen :oops:
 

gregstar65

Mitglied
So, :rtfm: ... Stunden später und ich habe einen Lösungsansatz: Permutation ist das Zauberwort!
Beim Versuch es zu implementieren, bin ich aber leider noch nicht viel weitergekommen.

Ich lande nach wie vor in einer Endlosschleife und bekomme auch keine Ausgabe hin.:bloed:

Für jede Idee bin ich dankbar:

Java:
public class Gegengewicht {

	
	public static void main(String[] args) {
		int[] gewichte = {22,6,4,18};
		Gegengewicht.ermittle(gewichte, gewichte.length);

	}

	private static void ermittle(int[] gewichte, int length) {
		// Rekursionsanfang
		if(length==0) {
			for(int i=0; i<gewichte.length; i++){
				System.out.print(gewichte[i]+" - ");
			}
		}// Rekursionsschritt
		else {

			ermittle(gewichte, length-1);
			for(int i=0; i<=length-1; i++){
				{
					vertausche(gewichte, i, length);
					ermittle(gewichte, length-1);
					vertausche(gewichte, i, length);
				}
			}
		}
	}

	private static void vertausche(int[] g, int i, int length) {
		int dummy=g[i];
		g[i]=g[length];
		g[length]=g[dummy];
	}
}
 
Zuletzt bearbeitet:

Adelhorst

Mitglied
Hallo.
Hier mal mein Vorschlag hierzu:
Java:
public class Gegengewichte{

    public static void ermittle(int[] gewichte, boolean[] aktiv, int pos){
        if (pos>=gewichte.length) {
            for(int i=0; i<gewichte.length; i++) {
                if(aktiv[i]==true) IO.print(gewichte[i] +" ");
                else System.out.print("_ "); 
            }
            System.out.println();
        }else{
            ermittle(gewichte, aktiv, pos+1);
            aktiv[pos]=true;
            ermittle(gewichte, aktiv, pos+1);
        }
   }

    public static void main(String[] args){
        int[]        gewichte = {22, 6, 4, 18};
        boolean[] aktiv       = new boolean[gewichte.length];
        ermittle(gewichte, aktiv, 0);
    }
}
Hier eine Lösung OHNE 'aktiv[]':
Java:
public class Gegengewichte{

    public static void ermittle(int[] gewichte, int pos){
        if (pos>=gewichte.length) {
            for(int i=0; i<gewichte.length; i++) System.out.print(gewichte[i] +" ");
            System.out.println();
        }else{
            int tmp       = gewichte[pos];
            gewichte[pos] = 0;
            ermittle(gewichte, pos+1);
            gewichte[pos] = tmp;
            ermittle(gewichte, pos+1);
        }
   }

   public static void main(String[] args){
      int[] gewichte = {22, 6, 4, 18};
      ermittle(gewichte, 0);
   }
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
F rekursiver Aufruf (Sudoku und Guice) Allgemeine Java-Themen 19
Cromewell Tail-Rekursiver Counting Sort Allgemeine Java-Themen 20
D Rekursiver Datentyp Allgemeine Java-Themen 2
G ziffern zählen mit rekursiver methode Allgemeine Java-Themen 2
T JNA, Aufruf der Funktionen einer dll Allgemeine Java-Themen 5
T Der Aufruf von CMD-Programm Allgemeine Java-Themen 30
Alex_99 Programm stürzt beim Aufruf der Funktion ab? Text ausgeben Allgemeine Java-Themen 45
I Hibernate Envers - Aufruf der Methode zum Speichern selbst ausführen oder managen? Allgemeine Java-Themen 0
berserkerdq2 Wie mache ich den rekursiven Aufruf in IJVM Allgemeine Java-Themen 3
J Reflection Aufruf: .class durch .dll ersetzen Allgemeine Java-Themen 4
R JDK installieren OpenJDK-Aufruf sehr langsam Allgemeine Java-Themen 4
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
H Aufruf eines Web Service anhand übergebenen Parameter Allgemeine Java-Themen 2
P CMD Aufruf mit Admin-Rechte Allgemeine Java-Themen 2
cool_brivk24 Klassen Klassen Aufruf Fehlgeschlagen Allgemeine Java-Themen 14
D HTTP Aufruf einer Methode aus einem Servlet heraus Allgemeine Java-Themen 0
F Methoden Arraylist weiterverwenden nach methoden Aufruf Allgemeine Java-Themen 2
J Genson - zirkulärer Aufruf Allgemeine Java-Themen 1
C file.delete() funktioniert bei zweiten aufruf nicht mehr Allgemeine Java-Themen 3
B Kodierung von String -> URL aufruf Allgemeine Java-Themen 2
H Klassennamen zum Aufruf eines statischen Feldes aus Variable holen Allgemeine Java-Themen 4
M datei aufruf prüfen Allgemeine Java-Themen 9
D JNI DLL Aufruf Allgemeine Java-Themen 32
M datei aufruf datum auslesen Allgemeine Java-Themen 5
A Java Verhalten bei parallelem Aufruf derselben Methode?? Allgemeine Java-Themen 2
F Parameter im Link /jar-Aufruf Allgemeine Java-Themen 12
Z Socket Aufruf einer Klasse in einer anderen Klasse Allgemeine Java-Themen 6
A JNI: Unerklärlicher Crash beim Aufruf von CallVoidMethod Allgemeine Java-Themen 9
S Variablen bei Aufruf zurücksetzen Allgemeine Java-Themen 4
J yield() Aufruf in einer synchronized-Methode Allgemeine Java-Themen 13
R JAR aus Batchdatei Aufruf Allgemeine Java-Themen 4
Kr0e Sichtbarkeitsregeln nach Executor-Aufruf Allgemeine Java-Themen 5
B Cipher.getInstance Aufruf sehr langsam Allgemeine Java-Themen 2
M Aufruf von Unix-Shell in Java Allgemeine Java-Themen 5
G Aufruf einer Methode in IStatus exex Allgemeine Java-Themen 4
E Seltsamer aufruf von java.util.Date.toString() Allgemeine Java-Themen 3
C Netbeans - Aufruf-Reihenfolge Allgemeine Java-Themen 5
Nicer Problem mit Link aufruf Allgemeine Java-Themen 6
M Cobol-Aufruf aus Java Allgemeine Java-Themen 6
C Aufruf einer Methode einer anderen Klasse Allgemeine Java-Themen 14
T Lib/Framework zum Automatischen Aufruf von Methoden Allgemeine Java-Themen 2
R Ableiten - Methoden aufruf bei abgeleiteten Klassen Allgemeine Java-Themen 4
G DAOFactorry aufruf Allgemeine Java-Themen 10
G Aufruf einer Methode wenn Klasse noch nicht existiert Allgemeine Java-Themen 3
V Aufruf von Klasse mit Runnable versteh ich nicht Allgemeine Java-Themen 8
S Übergabe / Aufruf einer beliebigen Methode in einer anderen Allgemeine Java-Themen 9
R toString() methode überschreiben mit rekursivem aufruf. Allgemeine Java-Themen 8
N Main-Klasse wird beim Aufruf des JARs nicht gefunden Allgemeine Java-Themen 8
D Problem bei Aufruf einer Funktion Allgemeine Java-Themen 3
B Null Pointer Exception bei Canvas-objekt-Aufruf Allgemeine Java-Themen 12
S Aufruf in Konsole mit beliebig vielen Argumenten? Allgemeine Java-Themen 18
reibi Aufruf eines private Konstruktors Allgemeine Java-Themen 7
M Rekrusiver Aufruf ? Allgemeine Java-Themen 6
D aufruf beim kopieren Allgemeine Java-Themen 11
J einfachster Servlet-Aufruf klappt nicht Allgemeine Java-Themen 3
J Konstruktor-Aufruf nur aus einem bestimmten Package erlauben Allgemeine Java-Themen 5
S problem mit externen aufruf Allgemeine Java-Themen 4
M [Windows] Aufruf von Java mit Sonderzeichen im Classpath Allgemeine Java-Themen 5
D VM crash nach Aufruf von GetFieldID und GetMethodID in JNI Allgemeine Java-Themen 31
G PDF AUfruf Allgemeine Java-Themen 6
S Aufruf meines Programms Allgemeine Java-Themen 2
U zweifacher Aufruf animiertes gif Allgemeine Java-Themen 7
G Konstruktor-Aufruf nun mit oder ohne Typ? Allgemeine Java-Themen 9
T CMD nach aufruf von javaw Programmname wieder schließen Allgemeine Java-Themen 3
Z Problem beim Aufruf eines Listener? Allgemeine Java-Themen 4
A Problem beim Aufruf von javac Allgemeine Java-Themen 7
W Aufruf von JavaBeans Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben