Wie funktioniert diese Rekursion?
Die Rekursion soll eine Dezimalzahl ausgeben. Jedoch verstehe ich nicht ganz wie das abläuft. Die Zahl n wird so lange verkleinert, bis sie kleiner als 10 ist, dann wird sie ausgegeben. Aber es gibt doch keinen return-Wert, wie kommt man dann auf den Wert von n der vorherigen Rekursionstiefe. Danke
void writeDec(int n) {
if (n >= 10) {
writeDec(n / 10);
n = n % 10;
}
putchar(n + '0');
}
2 Antworten
Strukturell ist die Rekursion so aufgebau, daß sie zunächst absteigt, danach wird dann beim Aufsteig vom auf dem Stack verbliebenen übergebenen Argument der Divisionsrest bestimmt:
writedec(123)
(123) #übergebenes Argument
wrritedec(12)
(12)
writedec(1)
#jetzt Rekursionsende
1%10 =1 -> 1 ausgeben
12%10=2 -> 2 ausgeben
123%10=3 ->3 ausgeben
Merke, der Zustand in einer Funktion ist VOR einem Funktionsaufruf der gleiche, wie NACH der Rückkehr - Ungewöhnliche Grenzfälle mal außen vor gelassen. Das bedeutet vor allem auch, daß das übergebene Argument n als lokale Variable den rekursiven Aufruf unverändert übersteht.
Geh in den Code und führe den schrittweise aus. Die Zahl wird ausgegeben. Mehr Return Value braucht es nicht.