我的作业是编写一个递归函数,打印从零到n输入整数的所有二进制数.禁止使用循环,静态变量,数组,全局变量.
例如,如果输入为7,则输出应为:
000
001
010
011
100
101
110
111
Run Code Online (Sandbox Code Playgroud)
我的输出:
1
10
11
100
101
110
111
Run Code Online (Sandbox Code Playgroud)
如何用这些零修复输出?
这是我的代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
这是我的解决方案(对代码的更改很少):
#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;
}
Run Code Online (Sandbox Code Playgroud)
该convert函数现在需要两个参数而不是一个:除了要打印的数字,它还接收limit用户输入和循环的最终值.它用于num生成二进制数字,但它用于limit决定何时停止打印.这具有产生零的效果,直到limit达到大小.