由于相同的代码在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。
答案 0 :(得分:4)
您需要声明i
和z
,因为如果没有声明,则会获取全局变量,这会破坏使用递归函数的迭代。
为防止这种情况和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);