Problem mit Rekursion
-
Hallo,
ich soll eine Zahl mit einer bestimmten Base ausgeben (2,8,10,16) mittels Rekursion - die vorgeschrieben main und headerdateien habe ich bereits fehlerfrei angelegt...
Nun habe ich begonnen mit der rekursiven Implementaion der 10 Base: (ich habe mich hierbei mehr oder weniger an den in der Vorlesung beschriebenen Algorithmus gehalten)//Auszug case 10: if (n!=0) myprintf((n/10),b); putchar('0'+ (n%10)); break;
Als Ausgabe soll eine "185" erscheinen - allerdings stellt er mir vor diese Zahl immer eine 0 - ich habe gleiches mit der 2er Basis ausprobiert - auch hier erscheint als erstes eine "0".
Woran kann diese "0" liegen und wie bekomme ich diese weg?
Vielen Danktine
-
Hi,
vielleicht liegt es an deiner myprintf Funktion, die du vor uns versteckst. Vielleicht hättest du dich aber auch mehr anstatt weniger an den in deiner Vorlesung beschriebenen Algorithmus halten sollen.
Es wäre schon von Vorteil, wenn du die Funktion hier zeigen würdest.Gruß,
B.B.
-
void myprintf(int n, int b) { //Ausschluss von diversen Basen, wie vorgegeben bzw.Zahlen if ((b!=2) && (b!=8) && (b!=10) && (b!=16)) {printf("base %d not supported", b);} assert(n>=0); switch (b) { case 2: //base 2 if (n!=0) myprintf((n/2),b); //recursion descent putchar('0'+ (n%2)); // recursion ascension break; case 10: if (n!=0) myprintf((n/10),b); putchar('0'+ (n%10)); break; }}
Zahlen, die eingegeben werden sind vorgegeben - für die 2er Basis: n=185
für 10er: 185 - wird in der main-funktion festgelegt...vg tine
-
probier mal so:
... case 10: if (n!=0) { myprintf((n/10),b); putchar('0'+ (n%10)); } break; ...
-
^^oder so, sollte bis basis 36 funzen:
void myprintf (int n, int b) { int q; static char *z = "0123456789abcdefghijklmnopqrstuvwxyz"; if (q = n/b) myprintf (q, b); putchar (z[n-q*b]); } void main(void) { myprintf (35, 36); // z puts (""); myprintf (36, 36); // 10 puts (""); }
-
ich danke euch vielmals!
mit der Version von ;fricky funktioniert es jetzt wunderbar!