Zeng_fh_ 2022-02-04 13:33 采纳率: 89.8%
浏览 24
已结题

这段代码怎么分析呀,看答案解析说是辗转相除法求一个十进制数的二进制数,怎么理解呀


#include <stdio.h>
void fun(int n)
{
    if(n/2) 
    fun(n/2);
    printf("%d",n%2);
}
main()
{
    fun(10);
    printf("\n");
}
  • 写回答

2条回答 默认 最新

  • 慕雪华年 新星创作者: C/C++技术领域 2022-02-04 13:37
    关注

    这算是一个递归,我之前回答过这类问题,你可以参考一下

    https://ask.csdn.net/questions/7636620?answer=53676550

    解析看注释~

    #include <stdio.h>
    void fun(int n)
    {
        if (n / 2)
            fun(n / 2);
        printf("%d", n % 2);
    }
    //先传入10,10/2=5为真
    //执行下一次fun函数,传入10/2
    //传入5,5/2=2为真
    //执行下一个fun,传入2
    //传入2,2/2=1为真
    //执行下一步,fun传入1
    //(1/2)不为真,停止递归
    //开始执行printf(注意,是从后往前执行的)
    //n 1  1%2 1
    //  2  2%2 0
    //  5  5%2 1
    // 10 10%2 0
    int main()
    {
        fun(10);
        printf("\n");
    }
    

    如果对你有帮助,还请点个采纳,万分感谢!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月12日
  • 已采纳回答 2月4日
  • 创建了问题 2月4日