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);
}
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释n = 2的堆栈帧?我的意思是当n = 2 00时,我正在进行干运行.但是我还缺少一个01.有人可以解释为此代码生成的堆栈帧是什么.
让我们试着理解代码.
if(n < 1)
printf("%s\n",arr);
else
{
arr[n-1] = '0';
binary(n-1);
arr[n-1] = '1';
binary(n-1);
}
Run Code Online (Sandbox Code Playgroud)
我们将遵循向后的方法,因为它是一个递归函数.例如,让我们说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,
该方法被binary(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'并被binary(2)调用.这产生(000,010,100,110)
arr[2]然后被设置为'1'并被binary(2)调用.这产生(001,011,101,111).这些都是3位的字符串.
我希望这种方法能够说清楚.请随意提出其他任何问题.