有关函数printd的问题
以下是《C程序设计语言》第2版中的一个函数#include <stdio.h>
/* printd: print n in decimal */
void printd(int n)
{
if (n < 0) {
putchar('-');
n = -n;
}
if (n / 10)
printd(n / 10);
putchar(n % 10 + '0');
}
int main()
{
int n = 123;
printd(n);//输出123
return 0;
}
书本中有如下说明:
函数递归调用自身时,每次调用都会得到一个与以前的自动变量集合不同的新的自动变量集合。因此,调用printd(123)时,第一次调用printd的参数n=123。它把12传递给printd的第二次调用,后者又把1传递给printd的第三次调用。第三次调用printd时首先将打印1,然后再返回到第二次调用。从第三次调用返回后的第二次调用同样也将先打印2,然后再返回到第一次调用。返回到第一次调用时将打印3,随之结束函数的执行。
但是,我还是不明白为什么递归调用之后,首先输出的是1,然后再是2和3,请指教,谢谢!
[此贴子已经被作者于2018-4-8 20:07编辑过]