【发布时间】:2026-01-18 08:15:02
【问题描述】:
我收到了一个与递归相关的代码挑战,但无法完成。我对这些类型的问题的经验非常少,这个问题让我很难过。由于我已经失败了挑战,你们中的任何人都可以帮助我吗?
描述:
给定一串数字和运算符,打印出所有可以添加括号的不同方式,以强制明确运算顺序,以及按该顺序运行运算的结果。
假设: 没有奇怪的输入,所有内容都由一个空格分隔。 支持的运算符有 +、*、-、=(对于 = 运算符,如果值相同则返回 1,否则返回 0) 打印按数字排序的结果 不用担心输入表达式大小太大 您的代码应该用 javascript 编写 不要使用 eval 或外部库
例子:
node test.js "2 - 1 - 1"
((2-1)-1) = 0
(2-(1-1)) = 2
node test.js "2 * 3 - 4 * 5";
(2*(3-(4*5))) = -34
((2*3)-(4*5)) = -14
((2*(3-4))*5) = -10
(2*((3-4)*5)) = -10
(((2*3)-4)*5) = 10
node test.js "2 + 2 = 2"
((2+2)=2) = 0
(2+(2=2)) = 3
这是我目前所处的位置。我远未得到正确的输出,但我觉得逻辑开始到达那里。我从一个类似但不同的问题改编了这段代码。
var args = process.argv.slice(2)[0].split(" "),
numberOfOperators = 0;
args.forEach(function(val, index, array) {
if (isNaN(val)) {
++numberOfOperators;
}
});
args = args.join("");
var recurse = function(openParenCount, closeParenCount, input, pointer) {
if (openParenCount === 0 && closeParenCount === 0) {
console.log(input + "\n");
}
if (openParenCount > 0) {
input = input.slice(0, pointer) + "(" + input.slice(pointer, input.length);
recurse(openParenCount - 1, closeParenCount + 1, input, pointer+1);
}
if (closeParenCount > 0) {
input = input.slice(0, pointer+openParenCount+3) + ")" + input.slice(pointer+openParenCount+3, input.length+1);
recurse(openParenCount, closeParenCount - 1, input, pointer+3);
}
}
recurse(numberOfOperators, 0, args, 0);
【问题讨论】:
-
到目前为止你有没有尝试过?
-
请贴出您尝试过的代码,并说明问题所在。我们不会从头开始为你写这篇文章。
-
我已经添加了我到目前为止所写的内容。我似乎无法确定要作为第三个参数传递给 recurse() 函数的数组部分。
标签: javascript recursion permutation