2015-10-28 44 views
2
void binary(int n) 
{ 
    if(n < 1) 
     printf("%s\n",A); // Assume A is a global variable 
    else 
    { 
     A[n-1] = '0'; 
     binary(n-1); 
     A[n-1] = '1'; 
     binary(n-1); 
    } 
} 

任何人都可以请解释n = 2的堆栈帧吗?我的意思是当n = 2时,当我正在进行空运行时,我得到了00。但也有一个我失踪的01。有人可以解释一下为此代码生成的堆栈帧。生成'n'位的所有字符串。假设A [0 ... .n-1]是大小为n的数组

+1

请您的代码显示'A'的声明,并且在标签中包含您的语言(C?)。 – Bergi

+1

此代码似乎正确。你可以添加你得到的输出吗? –

+0

@EarlGray我越来越00和11.但会有其他值01,10,我无法使用此程序生成。 – user8971

回答

4

让我们试着了解代码。

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个输出尽可能位01

现在让我们假设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位的字符串。

我希望这种方法清楚。请随时提出其他问题。

相关问题