0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

递归实现依次打印出数字中的每一位

C语言编程学习基地 来源:C语言编程学习基地 作者:C语言编程学习基地 2022-05-05 15:17 次阅读

今天来分析一道非常经典的递归题目:实现依次打印出数字中的每一位。

代码如下:

#include 
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;}

结果如下:

62dfacd6-c798-11ec-bce3-dac502259ad0.png

运行顺序

谈到递归的时候,最重要的就是要弄明白它究竟是怎么运行的

下面的方法非常直观的表示了它的运算顺序

这里我用粘贴代码块的方式来展示

刚开始执行的是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}

看起来可能有点乱,在这基础上加上一些箭头就会清晰了

62f41a86-c798-11ec-bce3-dac502259ad0.png

起初我的想法是,在进行if判断之后,会先执行下面的printf,即先打印最后一位数8,再向前打印

实际上,if语句后的Print函数的嵌套调用是在下一行printf之前的、

也就是说它需要像图中这样完全调用完,直到if判断为假后,才会从后往前运行printf语句

这才有了最开始我贴的结果

程序依次打印了每一位的数字

63093f10-c798-11ec-bce3-dac502259ad0.png

如果这篇博客对你有帮助,还请点赞收藏支持一下!万分感谢!

原文标题:C语言习题:递归实现依次打印出数字,你学会了吗?

文章出处:【微信公众号:C语言编程学习基地】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4558

    浏览量

    66900
  • 递归
    +关注

    关注

    0

    文章

    28

    浏览量

    8976

原文标题:C语言习题:递归实现依次打印出数字,你学会了吗?

文章出处:【微信号:cyuyanxuexi,微信公众号:C语言编程学习基地】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    请问WATHR取值为Pmax电能寄存器的每一位代表多少电能呢?

    请问WATHR取值为Pmax 电能寄存器的 每一位代表多少电能呢?书大佬指教。
    发表于 12-26 07:55

    解释VI写入一位数字线

    兄长帮忙解释下附件写入一位数字线,怎么配置数字线,如何读取数字线电压?附件是LAB VIEW 大学第11章节的内容,没看懂??请知道的兄长帮忙解释下VI 用途
    发表于 03-29 23:17

    周立功can程序解析每个字节每一位

    请教,周立功labview例程里,需要什么改动或者直接能把某个字节里的每一位显示出来吗
    发表于 04-22 17:25

    我想问下Labview的XY图能打印出来吗?

    我想问下Labview的XY图能打印出来吗?
    发表于 12-26 18:56

    请问在串口调试实验为什么不停的往串口调试助手里打印出数字

    在串口调试实验为什么不停的往串口调试助手里打印出数字??
    发表于 02-12 00:27

    请问Quartus2的用一位全加器来实现全加器

    一位全加器是我自己封装的,在四全加器调用,在编译过程总是出错
    发表于 03-06 15:48

    我用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

    二进制每一位数可取

    二进制每一位数可取,方法:通过移位运算符>>、
    发表于 07-14 08:16

    C语言程序运算的操作

    每一位都有各自的控制对象,例如端口B的方向寄存器DDRB,如下图所示 它实际上控制着PB口的8个端口PB0-PB7的方向,也就是说它的每一位都控制个端口的方向,如果我们要把端口PB
    发表于 07-14 07:45

    如何利用C语言的域操作去实现对寄存器每一位的控制

    在单片机的编程,会使用到些IC里面的寄存器,而有些寄存器并不是每一位都是有效的,例如:这里的1-3则是保留的,不可以***作的。所以在对
    发表于 02-25 06:41

    Protel在线教程:在PCB中如何打印出中空的焊盘

    Protel在线教程:在PCB中如何打印出中空的焊盘
    发表于 04-22 09:05 1687次阅读
    Protel在线教程:在PCB中如何<b class='flag-5'>打印出</b>中空的焊盘

    python打印出abcd的所有排列组合

    如何使用Python生成"abcd"的所有排列组合,我们首先需要了解排列和组合的概念。排列是一组元素的有序排列,而组合是一组元素的无序选择。 为了打印出"abcd"的所有排列组合,我们可以使用递归函数来实现
    的头像 发表于 11-29 16:29 456次阅读

    python数字排列组合需要缩进吗

    何使用递归生成数字的排列组合: def generate_combinations ( n, r, prefix=[] ): if r == 0 : # 当r为0时,表示已经生成了一个组合,打印出
    的头像 发表于 11-29 16:40 201次阅读