Alle Wörter der Länge n mit 0 und 1

J

JblueG

Gast
Hey,

ich soll 2 Algorithmen entwickeln, die jeweils alle Wörter der Länge n ermitteln und ausgeben, die man aus 0-en und 1-en zusammenstellen kann.
Einen rekursiven Algorithmus und einen nicht-rekursiven.

Im Moment sieht meine Lösung so aus:

Java:
public class WoerterMit01 {

	public static void main(String[] args) {

		int n = 3;

		ArrayList<String> alteWoerter = new ArrayList<String>();

		for (int zaehler = 0; zaehler < n; zaehler++) {
			ArrayList<String> neueWoerter = new ArrayList<String>();

			if (alteWoerter.size() == 0) {
				alteWoerter.add("0");
				alteWoerter.add("1");
			} else {

				for (String string : alteWoerter) {
					neueWoerter.add(string + "0");
					neueWoerter.add(string + "1");
				}
			
			alteWoerter = neueWoerter;
			n++;
			}
		}

		for (String string : alteWoerter) {
			System.out.println(string);
		}
	}
}


Was meint ihr dazu? Das ist doch eine rekursive Lösung oder?
Jede for-Schleife ist doch eigentlich eine rekursive Lösung oder?
Bin mir im Moment so unsicher.

Hat jemand eine Idee wie ich das nicht-rekursiv lösen kann?

Ich kann leider auch gerade nicht sagen, ob die Lösung funktioniert weil mein Eclipse und Netbeans beide spinnen.

Hoffentlich kann mir jemand helfen!
Danke schonmal =)
 
J

JblueG

Gast
Ok, kannst du mir auch sagen warum?

soweit ich das im Internet nachlesen kann gehört die for-Schleife SEHR WOHL zur primitiven Rekursion.
Deine Antwort wirkt auf mich nicht, als hättest du dir viele Gedanken gemacht.

Ich meine, wenn ich eine for-Schleifen-Lösung und eine rekursive Lösung als Baum aufmalen würde, dann würden die Bäume doch genau gleich aussehen oder?

Meiner Meinung nach KANN man dieses Problem garnicht rekursiv lösen weil man ja nie weiß wie groß n ist und man deswegen einen bestimmten Teil des Programms immer so lange wiederholen muss bis n erreicht ist.
Das heißt doch eine nicht-rekursive Lösug zu machen ist unmöglich oder?
 
Zuletzt bearbeitet von einem Moderator:

JCODA

Top Contributor
Meiner Meinung nach KANN man dieses Problem garnicht rekursiv lösen weil man ja nie weiß wie groß n ist und man deswegen einen bestimmten Teil des Programms immer so lange wiederholen muss bis n erreicht ist.
Das heißt doch eine nicht-rekursive Lösug zu machen ist unmöglich oder?


Java:
public class Recursion {
	public static void main(String[] args) {
		printDownToZero(5);
	}
	
	public static void printDownToZero(int n){
		if(n>=0){			
			System.out.println(n);
			printDownToZero(n-1);
		}		
	}

}

Hier wird auch ein gewisser Teil wiederholt, und zwar genau so lange wie n>=0 :)
 
J

JblueG

Gast
Was willst du mir jetzt damit genau sagen?

Denkst du meine Lösung ist rekursiv oder nicht?
Soll deins eine rekursive Lösung sein?
 

Kevin94

Top Contributor
Ich glaube du verwechselt hier die Begriffe iterativ und rekursiv und die gepostete Lösung ist rein iterativ. Wenn man ein Array in einer Schleife durchläuft sagt man, das man darüber iteriert, das Interface, das Klassen implementieren müssen, um in einer foreach-Schleife verwendet werden zu können heist deshalb auch Iterable. Rekursiv ist, wenn du innerhalb der Methode die Methode selbst wieder aufrufst. Das was JCoda gepostet hat, ist ein Beispiel was Rekursion ist.

Und jede Schleife kann man afaik auch rekursiv abarbeiten, wenn man mal davon absieht das es einem bei zu vielen durchläufen einen StackOverflowError schmeist.

PS: weil die Aufgabe so schön ist, und du das wahrscheinlich sowieso nicht verwenden kannst:
Java:
for(long i=0;i<(1l<<(n+1));i++)
{
    System.out.println(Integer.toBinaryString(i));
}
 
Zuletzt bearbeitet:

JCODA

Top Contributor
Was willst du mir jetzt damit genau sagen?

Denkst du meine Lösung ist rekursiv oder nicht?
Soll deins eine rekursive Lösung sein?

Ich wollte dir lediglich ein Beispiel geben, dass man sehr wohl Dinge auch rekursiv lösen kann, die eine n-malige Abarbeitung verlangen.

Deine Lösung ist iterativ, rekursiv bedeutet, dass die gleiche Methode mit unterschiedlichen Parametern aufgerufen wird.

@Kevin: na, nich ganz, dein Code compiled gar nicht, und wenn du Long.toBinaryString(int i) verwenden würdest, kommen da alle Möglichkeiten für n+1 und darunter raus :p
 

KuhTee

Aktives Mitglied
Denkst du meine Lösung ist rekursiv oder nicht?
Sie ist es nicht. Man kann natürlich rekursive Algorithmen auch in iterativer Form implementieren (also iterative Programmierung, Algorithmus weiterhin rekursiv), aber das tust du nicht.

Eine recht typische Eigenschaft von Rekursion ist die, dass das Ergebnis erst NACH der Abbruchbedingung "erzeugt" wird. Die Abbruchbedingung der Rekursion stellt sozusagen den Startpunkt der eigentlichen Berechnung dar. Die klassischen Beispiele (z.B. Fibonacci und Fakultät) zeigen das eigentlich recht deutlich.

Und jede Schleife kann man afaik auch rekursiv abarbeiten, wenn man mal davon absieht das es einem bei zu vielen durchläufen einen StackOverflowError schmeist.
Also man kann jeden rekursiven Algorithmus auch iterativ schreiben, bin mir aber nicht sicher, ob das umgekehrt auch gilt?

[...]rekursiv bedeutet, dass die gleiche Methode mit unterschiedlichen Parametern aufgerufen wird.
Es muss nicht zwingend die gleiche Methode sein. Es können sich durchaus auch zwei oder mehr Methoden wechselseitig aufrufen.
 
J

JblueG

Gast
@JCODA:

achso. Ja was ich meinte war eigentlich, dass man Dinge, die eine n-malige Ausführung verlangen NUR rekursiv lösen kann.
Selbst wenn ich es iterativ programmiere, so ist der Algorithmus an sich doch rekursiv. Das meinte ich eigentlich damit.
Was meinst du dazu?
 
J

JblueG

Gast
@KUHTEE

also mein Algorithmus ist NICHT rekursiv obwohl ich ihn iterativ programmiert habe?
Bist du dir sicher?

Ist Iteration nicht einfach nur eine programmiertechnische Möglichkeit rekursive Algorithmen umzusetzen?
 

KuhTee

Aktives Mitglied
also mein Algorithmus ist NICHT rekursiv obwohl ich ihn iterativ programmiert habe?
Häh? ???:L :D

Ist Iteration nicht einfach nur eine programmiertechnische Möglichkeit rekursive Algorithmen umzusetzen?
Äh... nein. Wo ist denn bei dir die Abbruchbedingung? Tipp: "zaehler < n" bricht die SCHLEIFE und damit den kompletten Algorithmus ab, das ist aber was komplett anderes als die Abbruchbedingung in einer Rekursion. Dann folgt in der Rekursion erst der so genannte rekursive Aufstieg. Davon ist bei dir absolut nix zu sehen.
Ich denke es hilft, wenn man sich zuerst einmal über die mathematischen Hintergründe von Rekursion schlau macht.
 
J

JblueG

Gast
@All

hmm wenn ich Wikipedia richtig verstehe kann man zwar jede primitive Rekursion durch eine iterative Lösung ersetzen und umgekehrt es ist aber trotzdem nicht das gleiche.
 
P

pappawinni

Gast
Rekursion bedeutet gewissermassen, dass ein Algorithmus sich selbst aufruft.

Rekursion:
hauAlleBaeumeUm
Wenn noch ein Baum steht (Abbruchbedingung)
geh zum nächsten Baum und hau ihn um und dann hauAlleBaeumeUm


Iteration:
hauAlleBaeumeUm
Für alle stehenden Bäume
hau den Baum um.
 

xehpuk

Top Contributor
Endlositeration und -rekursion:
Java:
public class ToInfinityAndBeyond {
	void iterative() {
		while (true);
	}
	
	void recursive() {
		recursive();
	}
}

Fakultät iterativ und rekursiv berechnen:
Java:
public class Factorial {
	int iterative(int n) {
		int product = 1;
		for (; n > 1; n--) {
			product *= n;
		}
		return product;
	}
	
	int recursive(int n) {
		return n > 1 ? n * recursive(n - 1) : 1;
	}
}
 
P

pappawinni

Gast
Dann erklär das doch mal selbst.
Das einzig relevante für Rekursion ist, dass der Algorithmus durch sich selbst definiert ist.
Keine Ahnung wie du das besser verstehst.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
D Apache HTTPClient für alle Fälle Java Basics - Anfänger-Themen 41
missy72 Methoden Alle rekusiven Aufrufe abbrechen Java Basics - Anfänger-Themen 21
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
B Alle Zahlen finden, die 3 bestimmte Ziffern enthalten? Java Basics - Anfänger-Themen 9
K wie kann ich alle Attribute von dem Objekt(pagode) ausgeben lassen ? Java Basics - Anfänger-Themen 3
I Greenscreen, funktioniert nicht zu 100%... nicht alle Pixel werden geändert Java Basics - Anfänger-Themen 1
Butzibu Image Loader lädt nicht alle Bilder: Java Basics - Anfänger-Themen 4
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
E Select nimmt nicht alle Where /AND befehlen an Java Basics - Anfänger-Themen 4
K Erste Schritte Wie schnell ist LinkedHashMap im Vergleich zur ArrayList, wenn alle Entries durchlaufen werden? Java Basics - Anfänger-Themen 47
R Methoden Eclipse schlägt mir nicht alle Möglichkeiten vor Java Basics - Anfänger-Themen 4
melisax Alle Möglichkeiten eines Wortes angeben Java Basics - Anfänger-Themen 3
B Programm, dass alle 3 Tage eine Webseite öffnet? Java Basics - Anfänger-Themen 20
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
J Alle Dateien aus einem Verzeichnis laden Java Basics - Anfänger-Themen 10
Bademeister007 Operatoren Alle Zahlen einer ArrayList die durch 5 teilbar ist Java Basics - Anfänger-Themen 2
E Wie gebe ich alle Daten zwischen zwei Zeitpunkten aus? Java Basics - Anfänger-Themen 2
crrnogorka Letzte Zeile einer Tabelle "überschreibt" alle anderen Zeilen Java Basics - Anfänger-Themen 1
C alle möglichen Kombinationen zweier Ziffern auf drei / vier / und 'n" Stellen Java Basics - Anfänger-Themen 11
H Alle Geraden zahlen bis 10 ausgeben Java Basics - Anfänger-Themen 11
L Alle Ziele in einem Raster abknallen Java Basics - Anfänger-Themen 17
J Alle Werte eines Strings zusammen addieren Java Basics - Anfänger-Themen 15
S Laufzeit Quicksort wenn alle Elemente gleich sind Java Basics - Anfänger-Themen 4
B Alle Links in einem Text suchen und ersetzen mit einem neuen Link Java Basics - Anfänger-Themen 18
K Array alle Werte aufsummieren und ausgeben Java Basics - Anfänger-Themen 6
Dimax Erste Schritte String replace alle Zeichen Java Basics - Anfänger-Themen 10
L Wie vergrößere ich ein Rechteck in alle Richtungen um eins und bekomme dessen Rand? Java Basics - Anfänger-Themen 2
L Breadth-First Search statt einem Pfad, alle Pfade herausfinden Java Basics - Anfänger-Themen 4
X Erste Schritte String: Alle doppelten Leerzeilen entfernen Java Basics - Anfänger-Themen 21
M Regex-Ausdruck: Alle Zeichen bis auf ein bestimmtes erlauben (p{L}) Java Basics - Anfänger-Themen 5
I Alle Elemente von zwei Listen vergleichen Java Basics - Anfänger-Themen 1
Kirby.exe Alle möglichen Error Möglichkeiten abfangen Java Basics - Anfänger-Themen 33
M Unterklasse soll nicht alle Methoden erben Java Basics - Anfänger-Themen 3
V Erste Schritte for-Schleife; Ausgabe soll alle 5 Sekunden erfolgen. Java Basics - Anfänger-Themen 4
A Alle true Werte eines boolean Arrays herausfiltern Java Basics - Anfänger-Themen 19
D Alle Möglichkeiten, n-Anzahl aus Elementen aus einem Array zu wählen, ausgeben? Java Basics - Anfänger-Themen 23
M prüfen ob alle array werte gleich sind Java Basics - Anfänger-Themen 27
F Alle Zeichenkombinationen eines Strings iterativ herausfinden Java Basics - Anfänger-Themen 26
L Classpath Alle Dateien im Classpath finden Java Basics - Anfänger-Themen 4
G Überprüfen ob alle Ziffern von 1-9 in einem Integer vorhanden sind Java Basics - Anfänger-Themen 6
J Erste Schritte Alle möglichen ausgaben von 5 Zahlen als Vector Java Basics - Anfänger-Themen 7
R Methoden Entferne alle identische Knoten (Typ String) aus verkettete Liste Java Basics - Anfänger-Themen 8
D Methoden Eigene Methode um alle Ausgaben aufzurufen Java Basics - Anfänger-Themen 17
F Ordner auf alle Unterdatein abfragen Java Basics - Anfänger-Themen 3
A In einem String alle Eigennamen zählen Java Basics - Anfänger-Themen 6
B Klassen Alle Unter-Objekte durchlaufen in der Hauptklasse Java Basics - Anfänger-Themen 10
W ArrayList löscht alle Elemente bis auf eines Java Basics - Anfänger-Themen 2
B Webservice -> alle parameter bekommen von form Java Basics - Anfänger-Themen 2
das_leon Alle Zeilen einer CSV-Datei auslesen Java Basics - Anfänger-Themen 1
C HashMap - alle keys haben values der letzten put-Anweisung Java Basics - Anfänger-Themen 3
F Eclipse alle Projekt weg Java Basics - Anfänger-Themen 6
V Alle Komponenten eines JPanels Java Basics - Anfänger-Themen 14
I gemeinsame Config-Datei für alle Windows-User Java Basics - Anfänger-Themen 5
H JButton - Wechsel der Textfarbe alle 500ms Java Basics - Anfänger-Themen 10
DaCrazyJavaExpert Alle Zahlenkombinationen aus 9 zahlen finden Java Basics - Anfänger-Themen 17
F Alle Objekte einer Klasse nach Eigenschaft durchsuchen Java Basics - Anfänger-Themen 8
M Alle Instanzen einer Klasse ansprechen Java Basics - Anfänger-Themen 4
S Problem: Array alle Einträge gleich Java Basics - Anfänger-Themen 10
Z Enter Taste alle 0,5 Sekunden ausführen Java Basics - Anfänger-Themen 1
U RegEx alle Kommas bei den Zahlen in Punkt umwandeln Java Basics - Anfänger-Themen 3
K alle Vorkommen einer bestimmten Ziffer in einer Zahl zählen Java Basics - Anfänger-Themen 2
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
C Alle Zweierpotenzen bis 2^10 ausgeben lassen Java Basics - Anfänger-Themen 15
B Alle Attribute von Klasse bekommen und ändern Java Basics - Anfänger-Themen 12
M Input/Output Alle Zeilen auslesen und in Variable speichern Java Basics - Anfänger-Themen 5
W Mozilla Thunderbird email an alle Kontakte Java Basics - Anfänger-Themen 3
F Methode alle 15min ausführen Java Basics - Anfänger-Themen 5
D Alle möglichen Kombinationen in einem Array ausgeben Java Basics - Anfänger-Themen 2
I Alle Laufwerke und deres Pfade ausgeben Java Basics - Anfänger-Themen 6
S Classpath: Alle .jars innerhalb eines Ordners einbinden Java Basics - Anfänger-Themen 4
G Alle Objekte und Variablen automatisch ausgeben Java Basics - Anfänger-Themen 7
I Programm, welches eine Textzeile einliest und alle darin enthaltenen Buchstaben umwandelt Java Basics - Anfänger-Themen 3
G Wie bekomme ich alle Ausgaben von runTime.exec() Java Basics - Anfänger-Themen 7
L Best Practice Alle Kombinationen aus Listenelementen, Anzahl Listen unterschiedlich Java Basics - Anfänger-Themen 6
M Compiler-Fehler Alle Methoden eines Interfaces Implementiert dennoch Fehler Java Basics - Anfänger-Themen 3
I Alle Zeitzonen in Liste speichern Java Basics - Anfänger-Themen 4
F alle 100ms Befehle ausführen Java Basics - Anfänger-Themen 26
M Alle Sublisten einer bestimmten Laenge berechnen Java Basics - Anfänger-Themen 2
F Alle DEMOS fast veraltet...? Java Basics - Anfänger-Themen 13
J Alle Leerzeichen aus String entfernen Java Basics - Anfänger-Themen 13
D Methoden Alle Siebenstelligen Primpalidrome von PI Java Basics - Anfänger-Themen 6
K Durch alle Attribute eines Objektes iterieren Java Basics - Anfänger-Themen 6
P Klassen Alle Strings einer ArrayList<eigeneKlasse> anspre Java Basics - Anfänger-Themen 2
W String von hinten alle drei Zeichen abschneiden und in umgekehrter Reihenfolge ausgeben. Java Basics - Anfänger-Themen 9
M Stürzen alle Rekursive Methoden irgendwann ab? Java Basics - Anfänger-Themen 11
M Alle möglichen Strings Java Basics - Anfänger-Themen 5
T Alle Threads .notify() Java Basics - Anfänger-Themen 13
G Methoden Alle Objekte der ArrayList ausgeben funktioniert nicht. Java Basics - Anfänger-Themen 12
N Klassen Class nur einmal ausführen und sie speichert daten für alle anderen classes? Java Basics - Anfänger-Themen 3
M Klassen Auf Alle Array Methoden gleichzeitig zugreifen Java Basics - Anfänger-Themen 8
D Frame schließt gleich alle Frames Java Basics - Anfänger-Themen 5
T Wie mache ich einen Timer der alle 2 sekunden aufgerufen wird? Java Basics - Anfänger-Themen 5
G JFileChooser "alle Dateien" unterbinden Java Basics - Anfänger-Themen 3
S Aus zwei Dateipfaden alle Dateien auslesen Java Basics - Anfänger-Themen 11
B Frage zur Effizienz - alle Array-Felder initialisieren oder jedes Feld auf null prüfen? Java Basics - Anfänger-Themen 4
F Geht in alle Case rein, warum?? Java Basics - Anfänger-Themen 12
R Alle Klassen ermitteln, die Interface implementieren / Reflection Java Basics - Anfänger-Themen 51

Ähnliche Java Themen

Neue Themen


Oben