javascript - 在递归函数中,在哪里存储结果?

标签 javascript arrays recursion boolean return-value

我目前正在尝试让 JavaScript 为 boolean 函数生成真值表。给定一个函数,代码应该只列出所有可能的 boolean 组合,以及每个组合的函数输出。

至于生成所有组合,我将其放在一起(仅简化为组合代码):

var table = [];
function combinations(current) {
    var current = current || [];
    if(current.length === 3) {
        table.push(current);
    } else {
        var c = copy(current);
        c.push(true);
        combinations(c);

        c = copy(current);
        c.push(false);
        combinations(c);
    }
}

function copy(a) {
    var r = [];
    for(var i = 0; i < a.length; i++) r.push(a[i]);
    return r;
}

combinations(); // now table consists of each pair of 3 boolean values

所以基本上当它达到一个组合时(即 current.length === 3),它会将结果记录推送到 table。然而,我想知道这是否是存储递归函数结果的推荐方式。

我遇到了在递归函数中使用 return 的建议,但是如何实现这样的事情 - 即,如果 combinations 最后必须返回一个数组包含所有元素,怎么可能这样做?当然,最后我可以只使用 return table,但实际上我正在寻找一种方法来在函数内部完成所有这些操作,而无需像现在这样的外部变量。

那么,如何在不使用外部变量的情况下使组合将结果作为数组返回?

最佳答案

使用Array.concat() .

function combinations(current) {
    var current = current || [];
    if(current.length === 3) {
        return [current];
    } else {
        return combinations(current.concat(true)).concat(combinations(current.concat(false)));
    }
}

var table = combinations(); // now table consists of each pair of 3 boolean values

console.log(table);

更优雅,不是吗?

Demo →

关于javascript - 在递归函数中,在哪里存储结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5378603/

相关文章:

c - 两个字符串应该是不同的长度,但被算作相同的长度

c++ - 巨大的静态数组与函数内的局部数组

algorithm - 计算具有相互依赖关系的递归算法的复杂度

arrays - Ruby 合并排序——这个递归函数是如何工作的?

python - 从 for 循环内部进行递归时出现意外缩进

javascript - 在按钮上单击弹出窗口正在打开

javascript - 类型错误 : Image constructor: 'new' is required in ReactNative

c - 打印斐波那契数列时,数组打印出奇怪的问号符号

javascript - 通过id提交表单的函数

javascript - 数据服务和 ionic 问题