进行1和0的所有组合。代码在Java中效果很好,但在JS中效果不佳

时间:2019-04-04 18:12:32

标签: javascript java combinations

由于相同的代码在Java中运行良好,因此应该不会出现逻辑问题。他们是完全一样的。

Java代码:

public class ZeroOneGen {
  public static void ZeroOneGen(int[] dataArr, int digits, int index) {
    if (index == digits) {
      String str = "";
      for (int i = 0; i < digits; i++) {
        str = str + dataArr[i];
      }
      System.out.println(str);
      return;
    }

    for (int i = 0; i < 2; i++) {
      dataArr[index] = i;
      ZeroOneGen(dataArr, digits, index + 1);
    }

  }

  public static void main(String[] args) {
    int[] dataArrTemp = new int[3];
    ZeroOneGen(dataArrTemp, 3, 0);
  }
}

输出: 000 001 010 011 100 101 110 111

JS代码:

function ZeroOneGen(dataArr, digits, index) {
  if (index == digits) {
    var str = "";
    for (i = 0; i < digits; i++) {
      str = str + dataArr[i];
    }
    console.log(str);
    return;
  }

  for (z = 0; z < 2; z++) {
    dataArr[index] = z;
    ZeroOneGen(dataArr, digits, index + 1);
  }

} // end function

var dataArrTemp = new Array(3);
ZeroOneGen(dataArrTemp, 3, 0);

输出:000 001
我希望它会继续并打印其他组合。停止在001。

1 个答案:

答案 0 :(得分:4)

您需要声明iz,因为如果没有声明,则会获取全局变量,这会破坏使用递归函数的迭代。

为防止这种情况和for getting an error,可以在代码开头添加'strict mode';

请查看链接,因为它也会更改其他一些部分。

function ZeroOneGen(dataArr, digits, index) {
    var i, z;
    if (index == digits) {
        var str = "";
        for (i = 0; i < digits; i++) {
            str = str + dataArr[i];
        }
        console.log(str)
        return;
    }

    for (z = 0; z < 2; z++) {
        dataArr[index] = z;
        ZeroOneGen(dataArr, digits, index + 1);
    }
}

var dataArrTemp = new Array(3);
ZeroOneGen(dataArrTemp, 3, 0);