Rekursion Stellenwertsysteme umwandeln

o3rn

Grünschnabel
Guten Nabend!
Ich will eine Rekursion schrieben, die mir eine Zahl in einem Stellenwertsystem mit verschiedenen Basen in eine dezimalzahl schreibt..komme aber irgendwie nicht weiter. Hier mein Code

Code:
	public static void main(String[] args) {
		
		
	System.out.println(wandleUm(11110, 2));

	}
	public static long wandleUm(long zahl1, int basis){
		long dezimalZahl;
		 dezimalZahl = (zahl1 == 0) ? 0 : (zahl1 % 10) + wandleUm((zahl1 / 10 * basis), basis);
		
		
		return dezimalZahl;
	}

}
da kommt z.b 22 raus anstatt 30....find aber den Fehler nicht. Wenn die Zahl nur 4 Stellen hat klappts.
Vielen dank schonam im voraus.

mfg o3rn
 
Also ich glaube, dein Code ist korrekt. Mir sieht das irgendwie verdächtig nach Rundungsfehlern aus. Wenn ich den Code in VB.Net ausführe, erhalte ich bei Zahlen über 3 Abweichungen um eins nach oben. Und ich vermute, dass diese Abweichungen immer größer werden. Aber erklären kann ich das grad nicht :confused:

Code:
Public Function wandleUm(ByVal zahl As Long, ByVal basis As Long) As Long
    If zahl = 0 Then Return 0
    Return (zahl Mod 10) + wandleUm(zahl / 10 * basis, basis)
End Function

Vermuten würde ich, dass der Fehler hier liegt: "zahl / 10 * basis".
Überhaupt ist die Tatsache sehr interessant, dass praktisch dieselbe Zeile in VB.Net und C# unterschiedliche Ergebnisse liefert.
 
Zuletzt bearbeitet:
hmm..könnte sein..aber wie kann ich diese umgehen oder ausschließen? Das Vermute ich auch das ich da in zahl/10*basis nen Fehler ist..aber welcher? xD.
 
Hallo,
deine Formel ist falsch. Richtig ist:

public static long wandleUm(long zahl, int basis)
{
if (zahl == 0)
return 0;
else
return zahl%10 + basis*wandleUm(zahl/10, basis);
}
 
Guten Nabend!!

Ich habe ein weiteres Problem und zwar will ich ein Dezimalzahl in ein anderes Stellenwertsystem konvertieren und zwar mit Rekursion. Ich habe mir gedacht das ich das mit dem Horner Schema am besten machen kann. Also kam ich zu folgendem Code.
Code:

Code:
public static long wandleUmInUrsprungsSystem(long zahl, long neueZahl, int basis ) {
        long umgewandelteZahl;
        
        System.out.println(neueZahl);
        umgewandelteZahl = (zahl == 0)
                      ? 0
                      : 
                      wandleUmInUrsprungsSystem(zahl / basis ,zahl % basis, basis)
                      ;

        return neueZahl;

An sich macht er es richtig...jedoch muss ich die neueZahl irgendwie von hinten lesen können..also als Beispiel:

Zahl:13 neue Zahl:0 basis:2
kommt als neue Zahl in der Rekursion:
010110 raus jetzt will ich aber das er mir 1101 rausgibt..Komm aber irgedwie nit weiter.
Danke schonma für eure antworten..
 
Zurück