递归调用是先返回最内层的函数,执行最内层调用语句的后面的代码后返回当前层次的函数调用。要立体的看递归,不能直线思维。
age(3);//这一句执行的过程:
x==3,因为x!=0,所以进入if语句块中,执行age(x-1);//等age(x-1);返回后还要执行下一行代码printf("%d\n",x);
也就是再次调用age这个函数,这次是x==3时的age函数中调用x==2时的age函数,此时传入的参数是2,进入age函数内执行过程如下:
x==2,因为x!=0,所以进入if语句块中,再次执行age(x-1);同上,此时传入的参数是1,
x==1,因为x!=0,所以进入if语句块中,再次执行age(x-1);同上,此时传入的参数是0,
x==0,所以不进入if内部了,直接结束了这次的age函数,开始执行age(x-1);函数的下一行
printf("%d\n",x);此时的x==1,所以输出1.然后此次的age(x-1);函数调用结束,继续执行此次
age(x-1);函数的下一行printf("%d\n",x);此时x==2,所以输出是2,同理还要输出一次3.输出3的时候就是最开始调用age(3)的这次。