В настоящее время я пытаюсь разрешить JavaScript генерировать таблицу истинности для логической функции.Для данной функции код должен просто перечислить все возможные логические комбинации с выводом функции из каждой комбинации.
Что касается генерации всех комбинаций, я собрал это вместе (упрощенно только для кода комбинации):
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
в конце, но я на самом деле ищу способ сделать все это внутри функции, без внешней переменной, как сейчас.
Итак, как мне это сделать?make combinations
вернуть результаты в виде массива без использования внешней переменной?