[Java] Wahrheitstaffel rekursiv

@johbon, das ist interpretationssache..
bei dir liegt das erste bit einfach ganz links, hier ganz rechts.. in java liegt es ebenfalls ganz rechts.
Ergänzung ()

hier eine kombination von Killkrogs ansatz, der elegantere überigens..

Code:
public static void int2bit_ex(int in)
	{
		final int shifts = 4;
		int testbit = 1 << shifts-1;
		
		for (int i = 0; i < shifts; i++)
		{
			if ((in & testbit) == testbit)
				System.out.print("1");
			else
				System.out.print("0");
			
			testbit = testbit >> 1;
		
		}
		
		if (in > 0) 
			{
				System.out.println();
				int2bit_ex(in-1);
			}
	}
 
wäre nicht auch ein Ansatz wie bei der Fakultät denkbar?
Code:
 public static String int2binary(int value, int bit)
 {
	 if (bit > 0) {
		 return int2binary(value / 2, bit - 1) + ((value % 2 > 0) ? "true  " : "false ");
	 }
	 
	 return "";
 }

for (int i = 0; i < 8; i++) {
  System.out.println(int2binary(i, 3));
}
das dann von 0 bis 7 aufrufen...

so macht die Rekursion mehr Sinn, weil das Problem ständig vereinfacht wird...
 
Zuletzt bearbeitet:
1668mib schrieb:
Die hier verwendeten Rekursionen sind lediglich ein (schlechter) Ersatz von Schleifen

Jede Rekursion ist durch Schleifen ersetzbar. Vllt. nicht in jeder Programmiersprache, weil es hier und da Einschränkungen für Schleifen gibt, aber grundsätzlich gilt das.

Rekursion ist manchmal einfacher zu erfassen/programmieren, dafür muss man (wie schon gesagt wurde) den Mehraufwand beachten, um mehrere Methoden zu starten.
 
Ja, aber ich will man sehen wie man eine Baumstruktur ohne Rekursion durchgeht... macht sicher Spaß...

Es geht mir hier auch nicht um eine Grundsatzdiskussion zum Thema Rekursion, nur ist es schon extrem sinnlos, am Ende die selbe Methode nochmals aufzurufen und im Grunde dann komplett unabhängig vom vorherigen Aufruf das selbe nochmal machen (gut, mit einem veränderten Eingangswert...)

also ob ich die gezeigte Methode int2bit_ex(int in) ohne Rekursion einfach in einer Schleife aufrufe oder nicht - das kommt halt exakt auf das selbe raus...
 
Also ich finde schon, dass sich diese Aufgabe sehr gut für eine rekursive Lösung eignet. Wenn man sich z. B. mal eine Wahrheitstabelle mit 3 Variablen anschaut:
Code:
      +-------------+
false | false false |
false | false true  | 
false | true  false |
false | true  true  | 
      +-------------+
true  | false false |
true  | false true  | 
true  | true  false |
true  | true  true  |
      +-------------+
Man kann sie sich aus zwei Wahrheitstabellen mit jeweils 2 Variablen zusammengesetzt vorstellen. Bei der ersten Tabelle schreibt man vor jede Zeile zusätztlich ein "false" und bei der zweiten vor jede Zeile ein "true".

Dies könnte man in Java dann ungefähr so umsetzen:
Code:
class Wahrheitstafel {

	private static void printWahrheitstafel(int anzahlVariablen, String praefix) {
		if (anzahlVariablen == 1) {
			System.out.println(praefix + "false");
			System.out.println(praefix + "true ");
		} else {
			printWahrheitstafel(anzahlVariablen - 1, praefix + "false ");
			printWahrheitstafel(anzahlVariablen - 1, praefix + "true  ");
		}
	}

	public static void main(String[] args) {
		printWahrheitstafel(3, "");
	}

}
 
@Scheppat:
Ich stimme dir in dem Punkt uneingeschränkt zu, diese ständigen wiederkehrenden Muster sind an sich schon "gut" für ne Rekursion... man kann sich das ja auch im Grunde als Baum vorstellen

eigentlich hatte ich auch diese Lösung von dir im Kopf irgendwie, muss nur zugeben, dass ich daran gescheitert bin ^^ (Hatte auch nicht sooo viel Lust sie bei der Arbeit zu behandeln...)
 
Zurück
Oben