这个是一个典型的递归题目,浅浅分析一下。
要想打印出一个无符号整数的每一位,得先定义一个变量,然后还要有输入,输出,我先把整个代码展示一下
void print(int n)
{
if (n > 9)
{
print(n / 10);
}
printf("%d ", n % 10);
}
int main()
{
unsigned int num = 0;
scanf("%d", &num);
print(num);
return 0;
}
运行的时候肯定是先从主函数开始了,先进去之后,输入一个整数,比如说123的话,也就是说num=123;然后下一步进到print()函数中,这个时候代码跑到我们自己定义的print()函数中去,然后因为n=123大于9的,所以进到if语句中123除以10,n就变成了12,递归嘛,自己调用自己呗,n=12还是大于9的,继续进到if语句中除以10,然后n=1,此时,n=1<9,所以不执行if语句了,开始执行printf语句,打印n%10,也就是求余数,1%10=1,先打印了1,然后此时print函数已经调用完了,要开始执行printf函数,回到上一个print函数中也就是n=12的时候再去执行printf函数,12%10=2,打印完2之后,再回到第一个print函数,执行printf函数,123%10=3,打印出3。
这个样就打印出了每一位整数。如果文字有点麻烦的话,可以看图,是从b站上鹏哥视频中截图自己做的笔记。
话不多说,上图。
先执行黑线,也就是print函数,再执行红线,printf函数。
也就是说print函数完全调用完以后,才回返回去执行printf函数