2017-11-17 3 views
-3
#include <stdio.h> 
    int x=2,y=4,z=17,w=3,count=0; 

    void p(int z,int *x){ 
     *x= 3*z - *x; 
     int w=*x+z; 
     printf("%d %d %d %d \n",*x,y,z,w); 
     if(*x<=y){ 
      p(*x+1,&w);   
      printf("%d %d %d %d \n",*x,y,z,w); 
     } 
    }       


    int main(void){ 

     p(1,&x); 
     printf("%d %d %d %d \n",x,y,z,w); 
     return 0; 
    } 

Ich versuche, diesen Code von Hand ausführen, um die Ausgabe aber die Ergebnisse zu nehmen, die ich von Hand produzieren unterscheiden sich von der Ausgabe, die ich habe, wenn ich es kompilieren und ausführen. Kann mir jemand im Detail erklären, wie die Ausgabe des Programms erstellt wird?Rekursion mit Zeigern in C

Die Ausgabe, die geben soll, ist

1 4 1 2 
4 4 2 6 
9 4 5 14 
4 4 2 9 
1 4 1 4 
1 4 17 3 
+1

Welche Ergebnisse erhalten Sie von Hand? –

+2

Dies ist eine wirklich schlecht geschriebene Rekursion, sehr schwer zu folgen. Hat es einen anderen Zweck als verwirrte Menschen? –

+0

ich bekomme 1 4 1 2 \ 4 4 2 6 \ 9 4 5 14 von hand. Danach weiß ich nicht weiter. Das war eine Übung in einer Prüfung. –

Antwort

0

Wenn Sie von Hand diese bearbeiten möchten, können Sie einen Stapel in einem Papier ziehen sollte, und drücken Sie Werte von x, y, z, w vor jedem rekursiven Anruf, & Pop sie am Ende. Da wir einen rekursiven Aufruf in der Prozedur haben, denke ich, dass das leicht zu tun wäre.