Zahl zur Basis

Status
Nicht offen für weitere Antworten.

Andy85

Mitglied
Hi Leute,

habe folgendes Problem mit einem Programm, welches mir eine Zahl in einem anderen Zahlensystem darstellen soll. Eine iterative Lösung habe ich schon fertig:
Code:
public class MyProg {

	static String zahlZurBasisIt(int zahl, int basis) {
		String basisArray[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
				"A", "B", "C", "D", "E", "F" };
		int rest;
		String ergebnis = "";
		do {
			rest = zahl % basis;
			ergebnis = basisArray[rest] + ergebnis;
			zahl = zahl / basis;
		} while (zahl > 0);
		return ergebnis;
	}
	public static void main(String args[]) {
		System.out.println(zahlZurBasisIt(7, 2));
	}
}

Nun will ich das ganze rekursiv schreiben. Leider habe ich keine Ahnung wie ich das anstellen soll. Weiß jemand weiter?

MfG
 
lasse die Schleife weg, reche einmal dein ergebnis aus und verkleinere zahl
und dann
return ergebnis + rekursiverAufruf mit der nun kleineren Zahl;

Abbruchbedingung aber auch irgendwo einbauen

-----

das große Array nur einmal statisch ablegen, muss nicht x-mal im Programmablauf erzeugt werden
 
Danke für die Idee. Jetzt habe ich folgendes:
Code:
static String basisArray[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
		"A", "B", "C", "D", "E", "F" };
static String zahlZurBasisRek(int zahl, int basis) {
		
		int rest ;
		String ergebnis = "";
		
		// Abbruchbedingung
		if(zahl == 1)
			return ...; // Komme im Moment nicht drauf 
		
		rest = zahl % basis;
		ergebnis = basisArray[rest] + ergebnis;
		zahl = zahl / basis;
		
		return ergebnis + zahlZurBasisRek(zahl , basis);
	}

zahl muss doch um zahl / basis verkleinert werden
-> habe Bsp durchgerechnet für (zahl = 17; basis =2):
17 = 8*2 + 1
8 = 4*2 + 0
4 = 2*2 +0
2 = 1*2 +0
1 = 0*2 +1

zur Abbruchbedingung weiß ich, dass bei zahl = 1 abgebrochen werden muss.
vielleicht muss Abbruchbedingung irgendwas mit rest gleich 1 sein, da die 1 zurückgegeben werden muss.

Da fällt mir grad ein, bei der rekursive Version soll ich KEIN Array benutzen...echt kompliziert wenn man nicht drauf kommt
 
Die Abbruchbedingung ist nicht, dass die Zahl 1 ist, sondern dass die Zahl kleiner ist als die Basis. Und wenn sie das ist, wird einfach die Zahl "so, wie sie ist" (d.h. der ihr entsprechende String) zurückgegeben.
 
> String ergebnis = "";
> [..]
> ergebnis = basisArray[rest] + ergebnis;

kürzer:
String ergebnis = basisArray[rest];

oder einfach nur mit return
return basisArray[rest] + ..;
ganz ohne ergebnis
 
Wenn die Abbruchbedingung so lautet:
Code:
// Abbruchbedingung
		if(zahl < basis)
			return zahl;

dann wird ein fehler angezeigt, cannot convert bla...
Leider komme ich noch immer nicht drauf, werde mich anderen aufgaben widmen😉

Trotzdem danke
 
> cannot convert bla...

seit wann sind Fehlermeldungen so unwichtig, dass du sie nicht mal hinschreibst?

Rückgabewert muss ein String sein,
z.B.
return ""+zahl;
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben