Frage zu Rekursivem Programmablauf
-
Hab eine Frage zu folgendem Programm
#include <stdio.h> void funktion(int x, int y) { if (y>0) { funktion(x,y/x); printf("%d",y%x); } } void main() { int p1=9,p2=222; funktion(p1,p2); }
Hierbei handelt es sich ja um ein Rekursiven Programmablauf dessen Bildschirmausgabe ich nicht ganz verstehe.
Das Programm geht doch wie folgt vor, oder?
1. Gehe zu void main()
2. Übernehme die Parameter p1=9 und p2=222 in „funktion“
3. Gehe zu void funktion und füttere x und y mit den Werten p1+p2
4. Lasse die rekursion so lange laufen wie y>0 istOk dann geht’s los
5. Rufe funktionswerte x=9 und 222/9
6. Gebe den Rest von 222/9 aus, sprich 6
7. Füttere die Funktion erneut mit den neuen Werten also x=9 y=24
8. Daraus folgt 24/9=18 Rest 6
9. Daraus folgt 2/9=0 Rest 2Soweit sogut. Nun zu meiner Frage. Warum gibt das Programm mir nun 266 raus und nicht 662? Das verstehe ich halt nicht. Liegt das daran das das Programm die Werte erst in den Stack schreibt und diesen dann erst wieder von unten nach oben ausgibt?
Gruß
-
Der Ablauf schaut so aus:
int main(){ funktion(9, 222); return 0; } funktion(9, 222) { funktion(9, 24) { funktion(9, 2) { funktion(9, 0){} printf("%d", 2%9); } printf("%d", 24%9); } printf("%d", 222%9); }
Du rufst die nächste Stufe von funktion auf bevor du ausgiebst.
Ich habe der einfachheit halber if(y>0) nicht hingeschrieben.
-
Danke :>