pepsi02
pepsi02
采纳率77.8%
2021-03-04 18:08

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_learner cpp_learner 1月前

     将参数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;
    }
    点赞 2 评论 复制链接分享
  • weixin_45485578 超级套娃 1月前

    自己调用自己慢慢调吧

    点赞 评论 复制链接分享
  • lenovo8088 阳光8088 1月前

    纯C编程思想是主要是面向过程,大部分功能是函数实现的,为什么不用函数?

    递归是倒推,一直循环直到结束。

    /除法 %余数

    点赞 评论 复制链接分享
  • weixin_42910064 泡视界 1月前

    ……为什么只输出一个1啊?

     if (n >= 2)
            to_binary(n / 2);
        putchar(r == 0 ? '0' : '1');--------如果说你说这里输出1,那么上面两句你觉得不运行了吗?

    递归就是自己调自己啊,你看to_binary会自己调用自己。要把自己调用自己写成代码,确实需要单独写一个函数,不然怎么实现一个代码块调用自己本身这个代码块呢?你说是吧

    点赞 2 评论 复制链接分享