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。有人可以解释为此代码生成的堆栈帧是什么。
答案 0 :(得分:8)
让我们尝试理解代码。
if(n < 1)
printf("%s\n",arr);
else
{
arr[n-1] = '0';
binary(n-1);
arr[n-1] = '1';
binary(n-1);
}
我们将遵循向后的方法,因为它是一个递归函数。例如,让我们说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个输出位[{1}}和0
。
现在让我们假设1
,
该方法称为n = 2
binary(2)
设置为“0”arr[2-1]
现在我们致电(arr[2-1] = arr[1] = ‘0’)
从上面的解释我们知道binary(1);
为binary(1)
生成0和1的输出。
这里arr[0]
设置为0.所以我们得到2个输出(00和01)。
该函数返回arr[1]
arr[n-1] = ‘1’
设置为1 arr[2-1]
我们再次致电(arr[2-1] = arr[1] = ‘1’)
此时binary(1);
设置为“1”,因此我们再获得2个输出(10和11)。
屏幕上总共有4个输出..(00,01,10,11)这些都是2位的字符串。
同样,你可以解决arr[1]
n = 3.
设置为“0”并调用arr[2]
。这产生(000,010,100,110)
然后将binary(2)
设置为“1”并调用arr[2]
。这产生(001,011,101,111)。
这些都是3位的字符串。
我希望这种方法能够说清楚。请随意提出其他任何问题。
答案 1 :(得分:3)
答案 2 :(得分:0)
您的说明存在问题:
现在我们调用binary(1); 从上面的解释我们知道二进制(1)为arr [0]产生0和1的输出。这里arr [1]设置为0.所以我们得到2个输出(00和01)。
此处的输出为00和10,因为arr [1]设置为0。
类似地,当arr [1]设置为1时,输出将为01和11。
我希望你同意