2016-08-16 14 views
4
void func(int num){ 
    if(num< 3){ 
     printf("%d ", num); 
     func(num+ 1); 
     printf("%d ", num); 
    } 
} 

この関数をfunc(0)と呼びます。 なぜ結果は0 1 2 2 1 0ですか? なぜそれが減少しているのかわかりません。再帰:この結果を理解できない

+5

だし、スタックが巻き戻されるように、第2の3つの数字は、第二のprintfから来ます。それをもっと良く見るには、フォーマット文字列として ''%d ''と' 'b:%d" 'を試してください。 – user3386109

+0

ええ、私はそれを得るが、なぜそれが2から0になるのか、それは私には意味がないのだろうか? –

+0

関数は呼び出されないため、コードは何も行いません。 –

答えて

11

は、ここで最初の3つの数字は、最初のprintfから来スタックトレース

f(0) 
    print 0 
    f(1) 
     print 1 
     f(2) 
      print 2 
      f(3) // 3 < 3 == false 
      print 2 
     print 1 
    print 0 
+0

私はなぜ3が間違っているのかを知っているので、2を印刷します。しかし、なぜそれも1と0を印刷しますか? –

+1

別の関数(A)の中で関数(B)を呼び出すと、関数(A)を中断せず、呼び出された関数(B)が終了するとスタックに戻します。 – CMPS

+0

うわー、 。これによって多くのことがクリアされました。 –