我帮助某人完成了他的学校作业 - 我们正在尝试编写递归函数(如果它很重要 - 无论是PHP还是JavaScript)。
我非常理解递归的原理,但我还没有写过任何来自"学术和#34;观点。
使用全局变量存储结果是一种好习惯,例如:
var results = [];
var rec = function(a) {
...
if (match)
results.push(someValue);
}
或者我应该使用return来收集所有这些结果(这会更困难)?
答案 0 :(得分:3)
优良作法是使用尽可能少的全局变量,最好不使用 1 。
为了避免在递归中需要全局变量,可以使用使用闭包的内部函数:
var rec = function(a) {
var someValue = [];
function dorec() {
// stuff happens
if (match)
results.push(someValue);
}
}
dorec();
}
所有变量应在使用前声明。 JavaScript没有 需要这个,但这样做使程序更容易阅读和制作 更容易检测可能隐含的未声明变量 全局。绝不应使用隐含的全局变量。使用全球 变量应该最小化。
答案 1 :(得分:3)
为了扩展现有的注释并给出一个具体的例子,下面是递归地将偶数添加到给定数组的代码:
var match;
var rec = function(a, res) {
if (a < 0) {
return res;
}
match = a % 2 == 0;
if (match) {
res.push(a);
}
return rec(a - 1, res);
}
var results = rec(10, []);
alert(results);