下次它调用自己时,它的值较小
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 语句不正确:
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 时,……
所以输出应该是:
"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)