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()函数里表述,改如何写这个程序啊。

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

 将参数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;
}

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

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

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

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

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

/除法 %余数

自己调用自己慢慢调吧