c - 具有十进制输入的递归函数以二进制形式打印从零到 n 的所有数字

标签 c recursion

我的作业是编写一个递归函数,打印从零到输入整数 n 的所有二进制数。禁止使用循环、静态变量、数组、全局变量。

例如,如果输入为 7,则输出应为:

000
001
010
011
100
101
110
111

我的输出:

1
10
11
100
101
110
111

如何用这些零修复我的输出?

这是我的代码:

#include <stdio.h>


void convert(int num)//converts decimal number to binary
{
    if(num>0)
    {
    convert(num/2);
    printf("%d", num%2);
    }
}

void print_binary_number(int num)
{
    if(num<0)
       return;
    print_binary_number(num-1);
     printf("\n");
    convert(num);

}

int main()
{

    int num;
    printf("Please enter an integer:");
    scanf("%d", &num);
    print_binary_number(num);
    return 0;

}

最佳答案

这是我的解决方案(对您的代码进行了最少的更改):

#include <stdio.h>


void convert(int num, int limit)
{
    if(limit>0)
    {
        convert(num/2, limit/2);
        printf("%d", num%2);
    }
}

void print_binary_number(int num, int limit)
{
    if(num>limit)
        return;
    convert(num, limit);
    printf("\n");
    print_binary_number(num+1, limit);
}

int main()
{

    int num;
    printf("Please enter an integer:");
    scanf("%d", &num);
    print_binary_number(0, num);
    return 0;
}

convert 函数现在接受两个参数而不是一个:除了要打印的数字外,它还接收 limit、用户输入和我们循环的最终值。它使用 num 来生成二进制数字,但它使用 limit 来决定何时停止打印。这会产生零,直到达到 limit 的大小。

关于c - 具有十进制输入的递归函数以二进制形式打印从零到 n 的所有数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44076617/

相关文章:

c++ - 堆栈(局部)或全局变量?

c - 显示错误列表,当连续数据与平均值相差太远时,

javascript - 使用 JS 单击跨度时更改跨度的 onClick

python - 递归Python函数的值修 retrofit 饰器

python - 阿克曼函数理解

c++ - 优化递归函数

javascript - 使用 IF 和 WHILE 在 JavaScript 中递归

c++ - 什么是 "extern linkage and with C language linkage"

c - 多维数组和传输缓冲区

c - 是否有可能在c中这样的结构声明