打印给定长度的递归二进制数



我试过了。

public class PrintBinaryNum {

public static void printBinary(int  num[],int k,int index)
{
if(index == k)
{
System.out.println(Arrays.toString(num));
return;
}

for(int i =index;i<k;i++)
{
for(int j=0;j<=1;j++)
{
num[i] = j;
printBinary(num, k, i+1);
}
}
}
public static void main(String[] args) {
int a[] = new int[2];
printBinary(a, 2, 0);
}
}

我得到以下输出:

[0, 0]
[0, 1]
[1, 0]
[1, 1]
[1, 0]
[1, 1] 

在这里,结果[1, 0][1, 1]被打印两次。我不确定我哪里出错了。如有任何帮助,不胜感激。

感谢
for(int i =index;i<k;i++)
{
for(int j=0;j<=1;j++)

调试代码。这包括用你的手和眼睛浏览代码,写下你认为会发生的事情。

然后,如果这实际上不是你想要的,或者,它是你想要的,但是当你运行代码时,代码没有做你想做的?

你发现了一个错误,修复它,继续工作,直到代码完全达到你想要的效果。

这里,简单地看一下,你已经意识到,在"顶层"调用中,当index为0时,这个循环"索引"次数,并且在每个循环中,它将循环两次(j为0和1)。在这个循环(运行k*2次)中,您调用自己,索引更接近结束点。

递归的作用很像for循环。考虑到这一点,你有3循环。

那显然太多了。

解决方案:去掉其中一个。最有可能的是,你想要完全摆脱for (int i = index)循环,或者你想要摆脱递归。

如果这是"用递归写这个"的作业,去掉循环。否则,不要使用递归,因为for循环更有效、更容易跟踪,而且更像java。