pepsi02 2021-03-04 18:08 采纳率: 87.5%
浏览 60
已采纳

c语言递归的疑惑之处,请大佬指点。

#include<stdio.h>
void to_binary(unsigned long n);

int main(void)
{
    unsigned long number;
    printf("Enter an integer (q to quit):\n");
    while (scanf("%lu", &number) == 1)
    {
        printf("Binary equivalent: ");
        to_binary(number);
        putchar('\n');
        printf("Enter an integer (q to quit):\n");
    }
    printf("Done.\n");

    return 0;
}
void to_binary(unsigned long n)
{
    int r;

    r = n % 2;
    if (n >= 2)
        to_binary(n / 2);
    putchar(r == 0 ? '0' : '1');

    return;
}

这个程序我是真看不懂,为什么自定义的函数void to_binary(unsigned long n),运行是如何自动递归循环的,这也没有循环语句啊。比如,我输入9,输出是1001.可我看代码,应该就只输出一个1,为什么会循环输出后面几位。

还有递归一定要自定义分离出一个函数么,,如果把下面自定义的函数去掉,直接在int main()函数里表述,改如何写这个程序啊。

有没有前辈指点一下,,自学小菜鸟求教!!!

  • 写回答

4条回答 默认 最新

  • cpp_learners 2021-03-04 18:17
    关注

     将参数n/2作为参数再一次调用此函数,以此作为递归,直到n<2时,才进行每一层递归函数的返回输出。

    void to_binary(unsigned long n)
    {
        int r;
    
        r = n % 2;
        if (n >= 2)
            to_binary(n / 2);    // 将参数n/2作为参数再一次调用此函数,以此作为递归
        putchar(r == 0 ? '0' : '1');
    
        return;
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题