首页 > 解决方案 > JS递归中的增量问题

问题描述

FCC练习中,我使用了这个糟糕的代码:

function rangeOfNumbers(startNum, endNum) {
  if (endNum < startNum) {
    return [];
  } else {
    let recurs = rangeOfNumbers(++startNum, endNum)
    recurs.unshift(startNum - 1);
    return recurs;
  }
};

真正糟糕的代码分开,引起我注意的是++startNum有效,而startNum++InternalError: too much recursion。看了一些其他的帖子和YT视频,还是没看懂。

这是正确的代码:

function rangeOfNumbers(startNum, endNum) {
  if (endNum - startNum === 0) {
    return [startNum];
  } else {
    var numbers = rangeOfNumbers(startNum, endNum - 1);
    numbers.push(endNum);
    return numbers;
  }
}

甚至更好:

function rangeOfNumbers(startNum, endNum) {
  return startNum === endNum
    ? [startNum]
    : [...rangeOfNumbers(startNum, endNum - 1), endNum ];
}

标签: javascriptrecursionincrement

解决方案


推荐阅读