c语言:将十进制正整数转成二进制后输出。图中源代码的递归函数是怎么实现的?看不懂,求详细点指教..

c语言:将十进制正整数转成二进制后输出。图中源代码的递归函数是怎么实现的?看不懂,求详细点指教...

如果n为13,二进制为1101
那么程序执行是这样的:
dtob(13)
{
13的二进制为1101,去掉最后一位后变成110,即13/2=6,进行dtob(6)
输出最后一位1,即13%2=1
}

dtob(6)
{
13的二进制为110,去掉最后一位后变成11,即6/2=3,进行dtob(3)
输出最后一位0,即6%2=0
}

dtob(3)
{
13的二进制为11,去掉最后一位后变成1,即3/2=1,进行dtob(1)
输出最后一位1,即3%2=1
}

dtob(1)
{
13的二进制为1,去掉最后一位后没有了
输出最后一位1,即3%2=1
}

最后就是
dtob(13)
{
    dtob(6)
    {
        dtob(3)
        {
            dtob(1)printf 1  -------1
            printf 1  --------------1
        }
        printf 0 -------------------0
    }
    printf 1 -----------------------1
}

追问

明白了。谢谢。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-10-10
递归函数,在函数体中又调用函数本身,上述函数应该不难理解,楼主应该多了解进制转换,printf("%d",n%2);实际上是输出了该十进制数转换成二进制数的最后一位,接下来要做的就是输出二进制数的倒数第二位,所以又调用了dtob,形参作为n/2消掉了最后一个二进制位,所以在这次调用时输出了倒数第二个二进制位……函数体中继续调用,输出的数以此类推,最后会将二进制数的各位输出。希望能够帮到你。
相似回答