【发布时间】:2016-07-09 01:53:09
【问题描述】:
我在堆函数中插入了一个字符串数组。尽管function generate() 可以正确打印输出console.log(permut);,但它不会返回任何数据。
版本 1 与 return arr
var arrStr = ['a', 'a', 'b'];
var generated = generate(arrStr, arrStr.length);
console.log(g2);
function generate(arr, n) {
if (n === 1) {
console.log(arr);
return arr;
} else {
for (var i = 0; i < n; i++) {
generate(arr, n - 1);
if (n % 2 === 0) {
swap(i, n-1, arr);
} else {
swap(0, n-1, arr);
}
}
}
}
function swap(a, b, ar) {
var temp = ar[b];
ar[b] = ar[a];
ar[a] = temp;
}
带有permut = permut.concat(arr);的版本2
var arrStr = ['a', 'a', 'b'];
var generated = [];
generate(arrStr, arrStr.length, generated);
console.log(generated);
function generate(arr, n, permut) {
if (n === 1) {
permut = permut.concat(arr);
//console.log(permut);
} else {
for (var i = 0; i < n; i++) {
generate(arr, n - 1, permut);
if (n % 2 === 0) {
swap(i, n-1, arr);
} else {
swap(0, n-1, arr);
}
}
}
}
function swap(a, b, ar) {
var temp = ar[b];
ar[b] = ar[a];
ar[a] = temp;
}
版本 1 为变量 generated 返回 undefined,版本 2 返回一个空数组。
我尝试返回一个测试字符串 'asd' 但仍然没有得到任何东西。
【问题讨论】:
-
你递归地调用函数,但是你对递归调用的结果做了什么?在
else路径中,您实际上返回了什么? -
功能正常。在
else路径中,n被减少,直到执行有问题的返回的n===1。 -
在您显示的代码中,如果
n !== 1(即在else部分中)您没有return语句。 IE。该函数不返回任何内容。如果要返回值,实际上必须使用return语句。if ... else是二进制的,因为它要么 做某事(如果条件为真)或者它做其他事情。在您的函数中,something else 部分由第一次初始调用执行,它不返回任何内容。我建议你在调试器中单步调试代码。 -
谢谢,我刚开始使用Mozilla的调试器。
标签: javascript arrays algorithm permutation