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


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

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

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");
}

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

应该是用递归而非辗转相除求出数据的二进制形式。辗转相除法常用于求解两个数的最大公约数