使用递归打印长度为N的所有二进制字符串(在c中)
我需要打印所有长度为N的二进制字符串,从0到可以表示的最大数字。下面的代码用于生成所有字符串。我遇到的问题是,字符串不是从最小到最大的顺序使用递归打印长度为N的所有二进制字符串(在c中),c,recursion,binary,C,Recursion,Binary,我需要打印所有长度为N的二进制字符串,从0到可以表示的最大数字。下面的代码用于生成所有字符串。我遇到的问题是,字符串不是从最小到最大的顺序 #define MAX_LENGTH 10 char binarystrings[MAX_LENGTH]; void binary(int n) { if (n == 0) { printf("%s\n", binarystrings); } else { binarystrings[n-1] = '0';
#define MAX_LENGTH 10
char binarystrings[MAX_LENGTH];
void binary(int n) {
if (n == 0) {
printf("%s\n", binarystrings);
} else {
binarystrings[n-1] = '0';
binary(n-1);
binarystrings[n-1] = '1';
binary(n-1);
}
}
int main() {
int length;
scanf("%d", &length);
binary(length);
}
当我的程序接收到3时,它会生成:
000
100
010
110
001
101
011
111
但我需要它来产生:
000
001
010
011
100
101
110
111
我应该如何让我的程序按正确的顺序输出数字?printf(“%s\n”,strev(二进制字符串))怎么样;反转字符串并检查错误,然后打印它并初始化您的字符数组以包含空字符,这样可能会更安全。最后,数组不需要为MAX_LENGTH+1那么printf(“%s\n”,strev(binarystrings))呢;反转字符串并检查错误,然后打印它并初始化您的字符数组以包含空字符,这样可能会更安全。最后,数组不需要为MAX_LENGTH+1您正在从右到左填充
二进制字符串。改为从左向右填充。为此,您需要将两个参数(例如位置和长度)传递到二进制文件中:
void binary(int index, int length)
{
if (index == length)
return;
binarystring[index] = 0;
binary(index + 1, length);
binarystring[index] = 1;
binary(index + 1, length);
}
并将其称为binary(0,length)
您正在从右到左填充binarystring
。改为从左向右填充。为此,您需要将两个参数(例如位置和长度)传递到二进制文件中:
void binary(int index, int length)
{
if (index == length)
return;
binarystring[index] = 0;
binary(index + 1, length);
binarystring[index] = 1;
binary(index + 1, length);
}
把它称为二进制(0,长度)
你注意到了吗,每一行的反面都是你想要的顺序吗?是的,我注意到了。我本可以使用字符串反转,但这并不能帮助我了解它们为什么会出故障。我现在看到我是倒着填充数组的,所以现在我可以完全避免字符串反转。你注意到每行的反转顺序是你想要的吗?是的,我注意到了。我本可以使用字符串反转,但这并不能帮助我了解它们为什么会出故障。现在我看到我在向后填充数组,所以现在我可以完全避免字符串反转。