#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语言中,递归同样重要,理解它的运行过程,就不难理解递归的概念啦~
注:该代码是本人自己所写,可能不够好,不够简便,欢迎大家指出我的不足之处。如果遇见看不懂的地方,可以在评论区打出来,进行讨论,或者联系我。上述内容全是我自己理解的,如果你有别的想法,或者认为我的理解不对,欢迎指出!!!如果可以,可以点一个免费的赞支持一下吗?谢谢各位彦祖亦菲!!!!!