今天来分析一道非常经典的递归题目:实现依次打印出数字中的每一位。
代码如下:
void Print(int n)
{
if (n > 9)
Print(n / 10);
printf("%d ", n % 10);
}
int main()
{
int num = 0;
scanf("%d", &num);
Print(num);
return 0;
}
结果如下:
运行顺序
谈到递归的时候,最重要的就是要弄明白它究竟是怎么运行的
下面的方法非常直观的表示了它的运算顺序
这里我用粘贴代码块的方式来展示
刚开始执行的是scanf输入,这里不再赘述
void Print(int n)
{
if (n > 9)
Print(n / 10);
printf("%d ", n % 10);
}
这一块是我们递归的主体
void Print(int n)
{
if (n > 9)
Print(3578 / 10);
if (n > 9)
Print(357 / 10);
printf("%d ", 357 % 10);//7
if (n > 9)
Print(35 / 10);
printf("%d ", 35 % 10);//5
if (n > 9)//这时候值为3,已经不满足条件
Print(3 / 10);//该语句不执行
printf("%d ", 3 % 10);//3
printf("%d ", 3578 % 10);//8
}
看起来可能有点乱,在这基础上加上一些箭头就会清晰了
起初我的想法是,在进行if判断之后,会先执行下面的printf,即先打印最后一位数8,再向前打印
实际上,if语句后的Print函数的嵌套调用是在下一行printf之前的、
也就是说它需要像图中这样完全调用完,直到if判断为假后,才会从后往前运行printf语句
这才有了最开始我贴的结果
程序依次打印了每一位的数字
如果这篇博客对你有帮助,还请点赞收藏支持一下!万分感谢!
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
代码
+关注
关注
30文章
4558浏览量
66900 -
递归
+关注
关注
0文章
28浏览量
8976
原文标题:C语言习题:递归实现依次打印出数字,你学会了吗?
文章出处:【微信号:cyuyanxuexi,微信公众号:C语言编程学习基地】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
解释VI写入一位数字线
兄长帮忙解释下附件写入一位数字线,怎么配置数字线,如何读取数字线电压?附件是LAB VIEW 大学中第11章节的内容,没看懂??请知道的兄长帮忙解释下VI 用途
发表于 03-29 23:17
我用printf数据传输到串口的数据每一位数上都加了30 例如数字是01 则串口助手上是31 请问我用LABVIEW程序怎么读出01呢?
我用printf数据传输到串口的数据每一位数上都加了30例如数字是01则串口助手上是31 请问我用LABVIEW程序怎么读出01呢?我现在是将数据每一位都单独读出来 然后在把每一位的数
发表于 11-12 17:01
如何实现10位数字软件激活码 截取所有中的1%作为有效激活码
如何实现10位数字软件激活码 截取所有中的1%作为有效激活码,尝试了输出所有排列,过于复杂,或者说是不是可以在每一位数中设置概率呢?求解答。
发表于 04-23 15:42
每一位C/C++程序员的调试工具 : GDB (GUN Debugger) 相关资料下载
每一位C/C++程序员的调试工具 : GDBgdb 介绍gdb 常用命令gdb调试命令列表gdb 调试段错误gdb 介绍gdb 常用命令gdb调试命令列表gdb 调试段错误...
发表于 07-02 07:08
C语言程序中位运算的操作
的每一位都有各自的控制对象,例如端口B的方向寄存器DDRB,如下图所示 它实际上控制着PB口的8个端口PB0-PB7的方向,也就是说它的每一位都控制一个端口的方向,如果我们要把端口PB
发表于 07-14 07:45
如何利用C语言的位域操作去实现对寄存器每一位的控制
在单片机的编程中,会使用到一些IC里面的寄存器,而有些寄存器并不是每一位都是有效的,例如:这里的1-3位则是保留的,不可以***作的。所以在对一
发表于 02-25 06:41
python打印出abcd的所有排列组合
如何使用Python生成"abcd"的所有排列组合,我们首先需要了解排列和组合的概念。排列是一组元素的有序排列,而组合是一组元素的无序选择。 为了打印出"abcd"的所有排列组合,我们可以使用递归函数来实现。
python数字排列组合需要缩进吗
何使用递归生成数字的排列组合: def generate_combinations ( n, r, prefix=[] ): if r == 0 : # 当r为0时,表示已经生成了一个组合,打印出
评论