2017-11-17 8 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; 
    } 

私は出力を取るためにこのコードを実行しようとしますが、私が手作業で生成した結果は、コンパイルして実行するときの出力とは異なります。 誰もがプログラムの出力がどのように作成されたかを私に詳しく説明できますか?Cでのポインタによる再帰

与えることになっている出力はあなたが手でこれを処理したい場合は、あなたが紙のスタックを描き、xの値をプッシュする必要があります

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

どのような結果が得られますか? –

+2

これは実際にはあまり書かれていない再帰であり、非常に難しいです。それは混乱する人以外の目的を持っていますか? –

+0

私は手で1 4 1 2 \ 4 4 2 6 \ 9 4 5 14を得る。その後、私はどのように続行するのか分かりません。これは試験での練習です。 –

答えて

0

あり、Y、Z、すべての再帰前のw電話、&最後にポップ。私たちは手続き中に再帰呼び出しを1つ持っているので、簡単にできると思います。