当前位置: 首页 > news >正文

(C语言)递归求整数的二进制(递归求法)(C语言教学)

#include <stdio.h>
void fun(int n){
    if(n>1){
        fun(n/2);
    }
    printf("%d",n%2);
}
int main() {
    int num;
    printf("请输入一个整数:\n");
    if (scanf("%d", &num) != 1) {
        printf("输入无效!\n");
        return 1;
    }

    printf("二进制表示:");
    fun(num);
    printf("\n");
    return 0;
}

这个代码相比于昨天的代码非常简单

首先在数学上,我们要知道整数是怎么转二进制的,通过不断的除于2,然后看余数是1还是0来决定的

因此,我们也可以通过不断的递归,来进行处理,让这个整数,不断地除于2,直到这个整数小于等于1为止,然后通过打印最低位来输出,

逐行解释:

if (n > 1)

递归终止条件:当 num 分解到 1 或 0 时停止递归。

例如 num=10,第一次调用 n=10,10 >1 继续递归。

fun(n / 2);

递归调用自身,参数为 n / 2(即右移一位)。

例如 n=10 → 10/2=5 → 5/2=2 → 2/2=1,此时终止递归。

printf("%d", n % 2);

回溯阶段:从最深递归开始打印,因此高位最后处理,低位先打印。

例如递归调用顺序为 10 → 5 → 2 → 1,打印顺序为 1 → 0 → 1 → 0,最终输出 1010

如果你还是不懂的话,可以看我之前的递归教学博客:

(C语言)递归函数教学(C语言教学)-CSDN博客

 以上就是本期内容啦!!!递归是算法中非常重要的知识,也非常考验一个人的能力,在C语言中,递归同样重要,理解它的运行过程,就不难理解递归的概念啦~

注:该代码是本人自己所写,可能不够好,不够简便,欢迎大家指出我的不足之处。如果遇见看不懂的地方,可以在评论区打出来,进行讨论,或者联系我。上述内容全是我自己理解的,如果你有别的想法,或者认为我的理解不对,欢迎指出!!!如果可以,可以点一个免费的赞支持一下吗?谢谢各位彦祖亦菲!!!!!

相关文章:

  • VSCode创建VUE项目(三)使用axios调用后台服务
  • Android自动化测试终极指南:从单元到性能全覆盖!
  • [免费]SpringBoot+Vue城市交通管理系统【论文+源码+SQL脚本】
  • Visual Studio调试的技巧
  • Python第六章04:列表操作练习题
  • pie保护
  • 什么是 Cache Line?
  • 编译安装redis,systemtcl配置redis自启动,系统并发调优
  • 搭建ISCSI传输的配置与管理
  • JDK 24新特性解读
  • 数据集获取
  • C 语言 第五章 指针(4)
  • Polymer入门指南:从零开始构建、组织、管理Web Component
  • 【机器学习-分类算法】
  • 老知识:OpenGL 的 glu这个库已被弃用,改用glm了
  • 【Azure 架构师学习笔记】- Azure Networking(1) -- Service Endpoint 和 Private Endpoint
  • 操作系统的概念、功能和目标
  • 耘想Docker版Linux NAS的安装说明
  • 存算一体与存算分离:架构设计的深度解析与实现方案
  • Linux文件操作笔记
  • 上海市国防动员办公室副主任吴斌接受审查调查
  • 扶桑谈|从石破茂“越菲行”看日本周边外交布局战略新动向
  • 人大新闻教育70年丨16759门课程里的时代密码
  • 第1现场 | 印巴停火次日:当地民众逐渐恢复正常生活
  • 美英达成贸易协议,美股集体收涨
  • 复旦设立新文科发展基金,校友曹国伟、王长田联合捐赠1亿元