Печать всех двоичных строк длины N с использованием рекурсии (в с) - PullRequest
0 голосов
/ 23 февраля 2019

Мне нужно напечатать всю двоичную строку длины 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

Как мне заставить мою программу вывести числа в правильном порядке?

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Вы заполняете binarystring справа налево.Заполните это слева направо вместо этого.Для этого вам нужно передать два параметра (например, позицию и длину) в binary:

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).

0 голосов
/ 23 февраля 2019

как насчет printf ("% s \ n", strrev (двоичные строки));Вероятно, было бы безопаснее перевернуть строку и проверить ее на наличие ошибок, затем распечатать ее и инициализировать массив символов, содержащий пустые значения ... и, наконец, не нужно, чтобы массив был MAX_LENGTH +1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...