Rekursionsaufgabe
-
Und dann?
modulo was???
-
Da kann man beqeuem mit dem Teilungsrest arbeiten:
// in einem Durchlauf/Aufruf mit zahl als Eingabe: ziffer = zahl % 10; naechste_zahl = zahl / 10;
zahl % 10 ergibt eine Zahl, die der Einerstelle entspricht. zahl / 10 ergibt ein Zehntel von Zahl, mit der üblichen Abschnittsrundung ergibt das genau die Zahl ohne die Einerstelle.
Das kannst du dann rekursiv oder in einer Schleife immer wieder machen, bis zahl / 10 gleich Null ist.
-
Hmmm...
Dann wäre der einfachste Fall, also der Rekursionsabbruch:
1 falls ziffer=zahl
und ansonsten soll er:
ziffernsuche(zahl mod 10,ziffer)
machen...
und wann gibt er dann die 0 aus??? Wenn zahl= 0 ist???
Oh Gott, bis jetzt hab ich alles verstanden, aber diese Aufgabe ist für mich grad echt der Hammer!!! Grrrr...
-
ann wäre der einfachste Fall, also der Rekursionsabbruch:
1 falls ziffer=zahl
Ich denke, du hast es verstanden. Du mußt aber auch abbrechen, wenn keine Ziffern mehr da sind, und kein Suchtreffer darunter war. Also zwei Abbruchbedingungen, eine für den Fall, das was gefunden wurde, und eine für den Fall, das man am Ende ankommt, und nichts gefunden hat.
ziffer hab ich oben für einen Zwischenwert verwendet, ich nenn's mal such_ziffer.
funktion ziffernsuche(zahl, such_ziffer) falls such_ziffer == zahl % 10 // Ende der Suche -- Treffer return wahr andernfalls zahl == 0 // Ende der Suche -- nichts gefunden return falsch andernfalls return ziffernsuche(zahl / 10, such_ziffer)
-
Juhu!!!!!!!!!!
-
Ich hab's getestet, und noch einen Fehler gefunden:
man muß zuerst prüfen, ob zahl Null ist, sonst bekommt man Probleme wenn such_ziffer Null ist.
Bevor ich also den falschen Pseudocode so stehen lasse:#include <stdio.h> #define PRINTD(x) (printf("%s -> %d\n", #x, x)) int ziffernsuche(int zahl, int such_ziffer) { if (zahl == 0) return 0; else if (such_ziffer == zahl % 10) return 1; else return ziffernsuche(zahl / 10, such_ziffer); } int main(void) { PRINTD(ziffernsuche(12345, 0)); PRINTD(ziffernsuche(12345, 2)); PRINTD(ziffernsuche(12345, 7)); return 0; }
So, jetzt hab ich deine Hausaufgabe gemacht.
Wenn wir uns jemals begegnen zahlst du mir ein Bier, oder?
-
@bgdnoy: das ist trotzdem einen winzig kleinen Fehler:
PRINTD(ziffernsuche(0, 0));
würdeziffernsuche(0, 0) -> 0
ausgeben und es sollte 1 sein, da 0 bei 0 vorkommt
-
Eine andere Möglichkeit ist, die Zahl als String zu verpacken und dann zu warten, bis in der Rekursion '\0' erreicht ist.
#include <stdio.h> #include <string.h> int main(){ char n[20]; sprintf(n, "%s", "0"); printf("%i\n", ziffernsuche(n, 0)); return 0; } int ziffernsuche(char *n, int d) { if (strlen(n)) if ( *n == ('0' + d) ) return 1; else return ziffernsuche(n+1, d); else return 0; }
-
curry-king, das ist die TheDailyWTF-Version
-
@bgdnoy: Aber klar doch!
Bin aber auch so schon drauf gekommen, wie die Lösung aussieht...
Danke für die Hilfe!!!