簡體   English   中英

使用遞歸打印所有長度為 N 的二進制字符串(在 c 中)

[英]Printing all binary strings of length N using recursion (in c)

我需要打印所有長度為 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”,strrev(binarystrings)); 反轉字符串並檢查錯誤,然后將其打印並初始化char數組以包含null可能更安全。最后,該數組不必為MAX_LENGTH +1

您正在從右到左填充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)

你可以試試我的代碼......我得到了正確模式的答案:

enter code here

#include <stdio.h>
void printBinary(int a[],int n){
    
    for (int i=0;i<n;i++){
        printf("%d",a[i]);
    }
    printf("\n");
    
}

void generateBinaryString(int n,int a[],int i){
    
    if (i==n){
        printBinary(a,n);
        return;
    }
    
    a[i]=0;
    generateBinaryString(n,a,i+1);
    a[i]=1;
    generateBinaryString(n,a,i+1);
}

int main()
{
    int n;
    printf("printing the binary string for n nos.");
    scanf("%d",&n);
    int a[n];
    
    generateBinaryString(n,a,0);

    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM