前言

我本人也在慢慢学习C语言,看的是C Primer Plus这本书,为了激励自己学习下去,所以会慢慢发分享一些学习心得,也当是记录一下吧,以后也好回顾回顾,本人很菜,高手们不要嘲笑,有问题欢迎指点或者交流,当然,我也可能不会......

正文

在C语言函数中使用递归往往能够极大的简便我们代码的复杂度,直接上代码,结合十进制转二进制代码来看更加方便。

#include <stdio.h>void to_Binary(unsigned long u)
{int r;r = u % 2;if(u >= 2)to_Binary(u/2);putchar(r == 0 ? '0' : '1');return;
}void main()
{unsigned long number;printf("please input a integer(q to quit) : \n");while(scanf("%ud",&number) == 1) {printf("Binary equivalent :");to_Binary(number);putchar('\n');printf("please input a integer(q to quit) : \n");}printf("Done!\n");return 0;}

这段代码是C Primer Plus的例子,我们使用了一个函数to_Binary(u),这个函数中嵌套了函数本身to_Binary(u/2),看上去像是一直“套娃”的感觉,这就是递归。

代码思路

先看main函数

定义一个无符号的long变量,后面进循环while,这个while触发的条件是只要你scanf的返回值是1,那么就会进入循环!那么scanf在什么情况下返回值是1呢,就是赋值功了,比如我们代码中赋值的地址是number的地址,number是个无符号的long变量,只要我输入的值是符合这个变量的要求的,就能赋值成功,那么就会进入循环,如果我们输入其他类型变量,比如字符,那么就不会进入循环,所以你输入q就会结束程序了!进入循环后,进入函数to_Binary(),得出结果,再次判断你接下来的输入是否符合无符号long变量的要求,从而决定是继续转二进制,还是结束程序。

下面看函数to_Binary

学过数字逻辑的同学们应该都知道如何用十进制求二进制吧,不断求除以2的余数.......这里不在赘述。仔细的看看代码也是这个思想。那么我们该怎么让这个结果连续的呈现出来呢?  这里可以用putchar,单字符输出。

递归就是只要这个十进制数二进制化还没到底(本身被除的只剩1),他就会一直进入新的阶层函数内,值得强调的是不同层次的函数内的变量虽然名字相同,但是他们本身的值是不一样的!例如:2(十进制) = 10(二进制),在这个代码中,number == 2,r = number % 2,即number == 0,也就是说第一层中,r == 0,此时if判断出number是>=2的,所以进入新的阶层的函数中去,在新的阶层中number == 1,新的阶层中r = number % 2,即r == 1,新的阶层中if判断出number是不符合>=2的条件的所以进入putchar,进行条件判断语句,这层的r == 1,所以输出了 '1',输出完成后,返回到上一阶层,完成上一阶层的putchar,上一层的r == 0,所以输出了 '0',所以输出就是10。

希望对大家有所帮助吧。

本文思路参考于C Primer Plus这本书,大家有兴趣可以去看看。

【C语言学习记录01】使用递归实现十进制转二进制相关推荐

  1. C语言学习记录——팔 函数和递归(1)

    库函数 IO函数 字符串操作函数 (比如strlen) 字符操作函数(比如把大写转小写) 内存操作函数(memset) 时间/日期函数(time) 数学函数(sqrt开平方) 其他库函数 怎样使用文档 ...

  2. JavaScript学习记录01快速入门、基本语法、严格检查模式

    文章目录 JavaScript学习记录01快速入门.基本语法.严格检查模式 1.1什么是JavaScript 1.2认识JavaScript框架 1.3快速入门 1.4基本语法入门 1.5数据类型简介 ...

  3. 【ArcGIS学习记录01】--利用CRU TS数据集绘制降雨量分布图

    [ArcGIS学习记录01]–利用CRU TS数据集绘制降雨量分布图 注:仅作为本人的学习记录方便以后复习查阅. 一.介绍 CRU TS 是目前使用最广泛的气候数据集之一,由英国国家大气科学中心 (N ...

  4. Fortran语言学习记录

    Fortran语言学习记录** ** 今天是2020年4月1日,上午终于把微软的Visual Studio 2013(https://blog.csdn.net/wobckr/article/deta ...

  5. C语言学习记录(14)英文单词排序 查找最长的单词

    C语言学习记录 前言 一直自己没有学习做笔记的习惯,所以为了加强自己对知识的深入理解,决定将学习笔记写下来,希望向各位大牛们学习交流! 不当之处请斧正!在此感谢!这边就先从学习C语言写起,自己本身对程 ...

  6. C语言之用递归进行十进制转二进制(图解)

    文章目录 前言 一.用二整除法 1.原理(图解) 如图: 2.使用图片 3.代码 二.对照表比较法 1.原理(图解) 如图: 2.使用图片 3.代码 总结 前言 在学习算法的过程中,我们会遇到如何把十 ...

  7. C语言学习笔记01:C语言基础语法_变量类型_类型转换

    文章目录 C语言第一天课程笔记 1. 内容安排 2. 课堂笔记 2.1 计算机硬件 2.2 计算机软件 2.3 编程语言和编译器 2.4 编程语言发展 2.5 C语言标准 2.6 C语言学习理由 2. ...

  8. c语言十进制转八进制递归,C语言之利用递归将十进制转换为二进制

    #include #include void change2(int num) { if (num != 0) { change2(num / 2); printf("%d", n ...

  9. C语言递归解决十进制转换二进制

    1.解题思路 在纸上做过十进制转二进制的朋友应该都用的都是除二取余的方法,写出每一次的余数知道0为止再从下至上依次读取余数即可,类似下图 根据观察可知十进制转换为二进制的问题属于我上一篇文章所提到的& ...

最新文章

  1. 蚂蚁金服面对亿级并发场景的组件体系设计
  2. 厉害了!Antiilatency推出移动位置追踪器!
  3. Linux下使用popen()执行shell命令
  4. linux启动phpstudy,phpstudy启动不了解决方法
  5. ThinkServer RD430:高性价比的海量存储服务器
  6. spring入门-设值方法的差异
  7. vue路由详解版一目了然
  8. python伪代码书写规范_代码这样写更优雅(Python 版)(转载)
  9. java听课笔记(六)
  10. PDA与服务器时间同步
  11. 五种方法快速查找对方IP地址(转)
  12. HUB、Switch、Router在OSI模型层次信息
  13. wifi抓包/苹果电脑mac book抓wifi sniffer packet
  14. lora网关采集温室大棚温湿度数据案例
  15. 图解图库JanusGraph系列-janusgraph图数据库的本地源码编译教程(janusgraph source code compile)
  16. Rabbitmq二进制集群搭建
  17. 大话设计模式6—模板方法模式(考试抄题)
  18. 52单片机四种方法实现流水灯
  19. 《正在爆发的互联网革命》北京西单图书大厦签售活动圆满结束
  20. AE使用函数集10:获取图层组中的所有图层

热门文章

  1. 次世代游戏场景间谍屋制作图文教程
  2. 写小米商城时遇到的bug和一些样式写法
  3. Linux摸底考试错题及总结
  4. MySql的执行顺序
  5. 精通 TensorFlow 2.x 计算机视觉:第一部分
  6. 用python做红绿灯_Python利用Event类模拟红绿灯
  7. 关于笔记本电脑每次开机都提示系统文件丢失,装完系统之后,当天可以随便的玩,第二天就出现老毛病(系统文件丢失)
  8. Python的优点(优势)
  9. 用c 语言如何实现鼠标画图,C在控制台上实现鼠标画图功能
  10. 如何有效掌握标签打造优质单品,如何掌握人群标签的秘诀