使用递归打印长度为N的所有二进制字符串(在c中)

使用递归打印长度为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';

我需要打印所有长度为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';
        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,长度)

你注意到了吗,每一行的反面都是你想要的顺序吗?是的,我注意到了。我本可以使用字符串反转,但这并不能帮助我了解它们为什么会出故障。我现在看到我是倒着填充数组的,所以现在我可以完全避免字符串反转。你注意到每行的反转顺序是你想要的吗?是的,我注意到了。我本可以使用字符串反转,但这并不能帮助我了解它们为什么会出故障。现在我看到我在向后填充数组,所以现在我可以完全避免字符串反转。