(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语言中,递归同样重要,理解它的运行过程,就不难理解递归的概念啦~

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值