次に自分自身を呼び出すときは、値が小さくなります
count(int m)
{
if(m>0)
count(m-1); // now it is calling the method "count" again, except m is one less
printf("%d",m);
}
したがって、最初に 10 で count を呼び出し、次に 9、次に 8、次に 7 と呼び出します。この if ステートメントが true でなくなるまでずっと:
if(m>0)
混乱を招く可能性があるのは、if ステートメントが次の行にのみ適用されることです (printf は if ステートメントの一部ではありません)。
だからあなたは持っています:
count(int m)
{
if(m>0)
{
count(m-1); // now it is calling the method "count" again, except m is one less
}
printf("%d",m);
}
そのため、m が > 0 でなくなると再帰呼び出しが停止し、printf が呼び出されます。
m が 0 の場合に printf を呼び出した後、その 'count' 呼び出しから戻り (m が 1 に等しい場所に戻る)、m が 1 の場合に printf を呼び出し、次に m が 2 の場合に printf を呼び出します。 、 .....
したがって、出力は次のようになります。
"0 1 2 3 4 5 6 7 8 9 10"
編集:スタックに関して:
これは、スタックが行っていることです:
count(10) // push count(10)
->
count(9) // push count(9)
count (10)
->
...
->
count(0) // push count(0)
count(1)
count(2)
count(3)
count(4)
count(5)
count(6)
count(7)
count(8)
count(9)
count(10)
-> (そして、印刷を開始し、スタックからメソッドをポップします)
// pop count(0), and printf(0)
count(1)
count(2)
count(3)
count(4)
count(5)
count(6)
count(7)
count(8)
count(9)
count(10)
->
// pop count(1), and printf(1)
count(2)
count(3)
count(4)
count(5)
count(6)
count(7)
count(8)
count(9)
count(10)
->
...
->
// pop count(9), and printf(9)
count(10)
->
// pop count(10), and printf(10)