C:使用递归的0和1组合

Ahm*_*zar 1 c recursion combinations truthtable

我想根据变量编号(数字)使用c递归地列出o和1的组合

我想要的输出是

000
001
010
011
100
101
110
111
Run Code Online (Sandbox Code Playgroud)

我已经尝试了许多算法,最后一个是:

void permute(unsigned number)    {

    if(number == 0) {
        printf("\n");
        return;
    }

    permute(number - 1);
        printf("0");
    permute(number - 1);
        printf("1");


}   //permute ends here


void permuteN(unsigned number) {

    unsigned i;

    for(i = 0; i < number + 1; i++){
        permute(i);
    }
}   //permuteN ends here
Run Code Online (Sandbox Code Playgroud)

我认为它给了我答案但没有订购因为我不知道放在哪里\n;

需要你的帮助!

Ani*_*han 5

如果您确实只是在寻找1's和0's的组合,我建议您只计算数字并将它们列为二进制.

0...7二进制数字并仅取最后3位(也许应用掩码),最后得到你指定的相同集合:

000
001
...
...
111
Run Code Online (Sandbox Code Playgroud)

对于n位组合,您需要这样做0..2^n - 1


基于这个答案,针对一个特定的3位 案例(感谢@ChrisLutz和@dirkgently)

#include <stdio.h>
int main(){
int numdigits = 3, j;
    for(j=1; j<8; j++)
        printbits(j);
}

void printbits(unsigned char v) {
  int i;
  for(i = 2; i >= 0; i--) putchar('0' + ((v >> i) & 1));
  printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

输出:

000
001
010
011
100
101
110
111
Run Code Online (Sandbox Code Playgroud)