不需要递归

// 有效代码
// 先处理 5 和 3,再奇偶性优先、绝对值大优先、向原点折叠
const exec = (line: string) => {
  if (0 === (inputCount = (inputCount + 1) % 2)) {
    const snums = [] as number[];
    const dnums = [] as number[];
    // 2. 累计,5 的倍数为 +,则 3 的倍数为 -,其它数字根据奇偶分成 2 组并转为绝对值保存
    let sum = line
      .split(" ")
      .filter(s => s !== "")
      .map(num => parseInt(num))
      .reduce((sum, num) => {
        if (num % 5 === 0) return sum + num;
        else if (num % 3 === 0) return sum - num;
        else (num % 2 === 1 ? snums : dnums).push(Math.max(num, -num));
        return sum;
      }, 0);
    // 3. 按照绝对值从大到小排列
    snums.sort((a, b) => b - a);
    dnums.sort((a, b) => b - a);
    // 4. 奇偶性优先原则,从大到小将 sum 向 0 折叠
    for (let i = 0, len = snums.length + dnums.length; i < len; i++) {
      const val = (snums.length > 0 && (sum % 2 === 1 || dnums.length === 0) ? snums.shift() : dnums.shift()) || 0;
      sum = sum + (sum > 0 ? -val : val);
    }
    // 折叠结果为 0 表示成立
    return sum === 0;
  } else return undefined; // 跳过奇数次的输入
};
let inputCount = 0;

// ACM 模式八股文代码别看
const readline = require("readline");
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
rl.on("line", (line: string) => (res => (res !== undefined ? outputs.push(`${res}`) : null))(exec(line)));
rl.on("close", () => outputs.forEach(res => console.log(res)));
const outputs: string[] = [];