Unten sind zwei ähnliche Beispiele, die eine rekursive Funktion definieren, die die Ziffern einer Zahl, die kleiner als 5 sind, druckt und sie auch zählt.Das Zuweisen eines Funktionsaufrufs zu einer Variablen in einer Rekursion führt zu einer anderen Ausgabe
Eingang: 12345
Ausgabe: 1234: 4 // Es gibt 4 Ziffern kleiner als 5
#include <stdio.h>
int function(int n) {
if(!n) return 0;
int r = function(n/10);
if ((n%10) < 5) {
printf("%d", n%10);
return r+1;
}
else return r;
}
int main() {
int x;
scanf("%d", &x);
printf(" : %d\n", function(x));
return 0;
}
zweiten Code, der die gleiche Funktionalität , aber druckt alles umgekehrt Ich kann es nicht verstehen. Ich bin nicht fließend in der Programmierung und immer noch neu, so dass ich hoffe, die Frage wird klar angegeben.
Eingang: 12345
Ausgabe: 4321:. 4
#include <stdio.h>
int function(int n) {
if(!n) return 0;
if(n%10<5) {
printf("%d", n%10);
return function(n/10)+1;
}
return function(n/10);
}
int main() {
int x;
scanf("%d", &x);
printf(" : %d\n", function(x));
return 0;
}
Vergleichen Sie die beiden Codes. Was machen sie anders? Da sich Ihre Frage auf die Reihenfolge der Ausgabedaten bezieht, achten Sie besonders auf die Reihenfolge der Vorgänge. Tipp: Das Funktionsergebnis einer Variablen zuzuweisen, hat an sich nichts damit zu tun. Es wäre auch nicht schwer, den zweiten Code neu zu schreiben, ohne sein beobachtbares Verhalten zu ändern. –
Versuchen Sie, es mit einem Bleistift und einem Stück Papier auszuarbeiten. Was passiert, wenn Sie die Funktion aufrufen (12345)? Für Fall 2 schlägt es den Test n% 10 <5 fehl, also ruft es als nächstes auf (1234). das den Test besteht, druckt also "4". Und so weiter. – FredK