2017-04-22 4 views
0

Ich habe den folgenden Code geschriebenRecurse Schleife Spur

#include <stdio.h> 
void recurse(); 
int main() 
{ 
recurse(); 
return 0; 
} 
void recurse() 
{ 
    static int n=987654321; 
    if(n==0) 
     return ; 
    printf("%d",n%10); 
    n=n/100; 
    int a=n; 
    recurse(); 
    if(a!=0) 
    printf("%d",a%10); 
} 

ich nicht verstehen, warum die Ausgabe 135.799.753 kommt? Was ich dachte, die Antwort zu sein war 135799, weil nach dem Drucken der ersten 9 nach 1357 n wird 9 und damit n/100 wird Null sein, so dass die Rekursivfunktion zum Haupt zurückkehrt, ohne etwas zu drucken. Bitte korrigieren Sie mich, wo ich falsch liege. Vielen Dank im Voraus !!

+1

Vielleicht einen Debugger verwenden –

Antwort

1

Die Ausgabe des Programms ist korrekt. Die Ausgabe besteht auch aus diesen Werten -

if(a!=0) 
printf("%d",a%10); 

Wert von a auch gedruckt wird, wenn es nicht 0 ist. Die Werte werden jedoch aufgrund dieser Anweisungen nach dem Rekursionsaufruf von zuletzt nach eins gedruckt.

Sie betrachten die Ausgabe als 135799. Der zweite 9 ist ein Wert von a%10, aber der Wert a%10 aus früheren Rekursionsaufrufen wird ebenfalls gedruckt, wenn diese Anweisungen nach dem Ende des Rekursionsaufrufs ausgeführt werden.

Sie können in diesem example sehen.