让我们试着了解代码。
if(n < 1)
printf("%s\n",arr);
else
{
arr[n-1] = '0';
binary(n-1);
arr[n-1] = '1';
binary(n-1);
}
我们将按照一个倒退的做法,因为它是一个递归function.For比如让说n = 1
,
为binary(1);
arr[n-1]
设置为‘0’
(arr[1-1] = arr[0] = ‘0’)
现在的方法被称为我们致电binary(0);
自(n<1)
我们打印arr
(打印0)
的调用返回到arr[n-1] = ‘1’
arr[1-1]
被设置为 '1' (arr[1-1] = arr[0] = ‘1’)
现在我们调用binary(0);
因为(n<1)
我们打印arr
(1打印)
因此,我们得到了2个输出尽可能位0
和1
。
现在让我们假设n = 2
,
的方法被称为 arr[2-1]
被设置为“0” (arr[2-1] = arr[1] = ‘0’)
现在我们调用binary(1);
从上面的说明我们知道,binary(1)
产生一个输出为0和1为arr[0]
。 这里arr[1]
设置为0.所以我们得到2个输出(00和01)。
该函数返回到arr[n-1] = ‘1’
arr[2-1]
为1 (arr[2-1] = arr[1] = ‘1’)
再次我们称之为binary(1);
这次arr[1]
被设置为“1”,因此,我们得到2个输出(10和11)被设置。
我们在屏幕上总共有4个输出..(00,01,10,11)这些都是2位的字符串。
同样,你可以解决n = 3.
arr[2]
被设置为'0'并且被调用。这产生(000,010,100,110) arr[2]
然后被设置为'1'并且被调用。这产生(001,011,101,111)。 这些都是3位的字符串。
我希望这种方法清楚。请随时提出其他问题。
请您的代码显示'A'的声明,并且在标签中包含您的语言(C?)。 – Bergi
此代码似乎正确。你可以添加你得到的输出吗? –
@EarlGray我越来越00和11.但会有其他值01,10,我无法使用此程序生成。 – user8971