在递归中使用全局变量是一种好习惯

时间:2014-10-27 19:41:45

标签: javascript php algorithm recursion

我帮助某人完成了他的学校作业 - 我们正在尝试编写递归函数(如果它很重要 - 无论是PHP还是JavaScript)。

我非常理解递归的原理,但我还没有写过任何来自"学术和#34;观点。

使用全局变量存储结果是一种好习惯,例如:

var results = [];

var rec = function(a) {
    ...
    if (match)
        results.push(someValue);
}

或者我应该使用return来收集所有这些结果(这会更困难)?

2 个答案:

答案 0 :(得分:3)

优良作法是使用尽可能少的全局变量,最好不使用 1

为了避免在递归中需要全局变量,可以使用使用闭包的内部函数:

var rec = function(a) {
    var someValue = [];
    function dorec() {
      // stuff happens
      if (match)
        results.push(someValue);
      }
    }
    dorec();  
}

1 Douglas Crockford

  

所有变量应在使用前声明。 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);

和小提琴:http://jsfiddle.net/xukukggL/