Я пытаюсь найти различные возможности равные 100 с цифрами 1-9. Эта функция дает желаемые результаты, но также и другие, которые я не предполагал. Другие результаты составляют до 100, но без некоторых из этих цифр, например, оставляют 3 или 6. Почему эти другие результаты включены?Почему эта рекурсивная функция пропускает числа?
var nums = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var signs = ["+", "-", "N"];
var results = [];
find100("1");
function find100(expr) {
if (eval(expr.replace(/N/g, "")) === 100) {
results.push(expr);
} else {
for (var i = eval(expr.substring(expr.length - 1, expr.length)) + 1; i <=
nums.length; i++) {
signs.forEach(function(sign) {
var expr2 = expr;
find100(expr2 += sign + i);
});
}
}
}
Желаемый результат:
1+2+3-4+5+6+78+9,
1+2+34-5+67-8+9,
1+23-4+5+6+78-9,
1+23-4+56+7+8+9,
12+3+4+5-6-7+89,
12+3-4+5+67+8+9,
12-3-4+5-6+7+89,
123+4-5+67-89,
123+45-67+8-9,
123-4-5-6-7+8-9,
123-45-67+89
eval()? почему вы используете eval? это почти всегда признак ужасного плохого дизайна. –
Можете ли вы включить то, что ваш выход и какие значения вы были или не ожидали? – leigero
Потому что я строю строку с +, - или ничего (N), которая будет позже оценена. – Gragh