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

    文章

    4908

    浏览量

    71256
  • 递归
    +关注

    关注

    0

    文章

    29

    浏览量

    9207

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

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

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

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

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

    我用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语言的域操作去实现对寄存器每一位的控制

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

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

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

    数字匹配滤波器的递归折叠实现

      针对数字匹配滤波器(DMF)的FPGA实现提出种优化结构。利用16移位寄存器(SRL16E)的存储潜力,设计递归延迟线(RDL);再
    发表于 05-20 14:53 ?5927次阅读
    <b class='flag-5'>数字</b>匹配滤波器的<b class='flag-5'>递归</b>折叠<b class='flag-5'>实现</b>

    51寄存器的所有寄存器名称,(包括寄存器每一位的作用及用法)资源详解

    51寄存器的所有寄存器名称,(包括寄存器每一位的作用及用法)资源详解
    发表于 10-16 13:04 ?14次下载
    51寄存器的所有寄存器名称,(包括寄存器<b class='flag-5'>每一位</b>的作用及用法)资源详解

    3d打印机结构_3d打印机分类

    3D打印机简称(3DP)是一位名为恩里科·迪尼的发明家设计的种神奇的打印机,不仅可以“打印
    的头像 发表于 04-28 14:19 ?2.1w次阅读

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

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

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

    在Python数字排列组合的实现通常需要使用循环和递归来生成所有可能的组合。对于代码块的循环和递归
    的头像 发表于 11-29 16:40 ?635次阅读

    matlab怎么取三数的每一位

    在MATLAB,可以使用些基本的算术和逻辑运算来取得个三数的每一位。下面是种基本的方法
    的头像 发表于 12-28 14:44 ?3046次阅读