我的作业是编写一个递归函数,打印从零到输入整数 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/