本帖最后由 jackz007 于 2021-11-7 00:17 编辑
代码改造一下,更容易说明问题#include <stdio.h>
void printdigits(int n )
{
if(n) {
printdigits(n / 10) ;
printf("%d\n" , n % 10) ;
}
}
int main()
{
int n;
scanf("%d", &n) ;
printdigits(n) ;
return 0;
}
现在以 n = 123456 为例来看看 printdigits() 函数的递归过程printdigits(123456)
printdigits(12345)
printtdigits(1234)
printtdigits(123)
printtdigits(12)
printtdigits(1)
printtdigits(0) -- n = 0 ,递归到达底部
printf(1 % 10) --> 1
printf(12 % 10) --> 2
printf(123 % 10) --> 3
printf(1234 % 10) --> 4
printf(12345 % 10) --> 5
printf(12346 % 10) --> 6
从改过的代码可以看出,在 n > 0 情况下,将一直递归,每次递归的新 n 是 n / 10,这样递归到第 6 次的时候,n 为 0 值,这时,递归到达底部,开始返回,在逐级返回的过程中,每一级均打印本级的 n % 10,一共打印 6 个数,于是,就看到了依次打印输出的 1、2、3、4、5、6。 |