【问题标题】:Why the result shows an array since the arguments are passing two numbers?为什么结果显示一个数组,因为参数传递了两个数字?
【发布时间】:2021-08-10 04:23:36
【问题描述】:

我试图解决 freeCodeCamp 中的 Javascript 问题。问题的标题是“使用递归创建数字范围”。我无法准确地根据问题描述修复它。然后,我试图从互联网上了解可能的解决方案。我找到了一个确切的解决方案并自行修改以更好地理解。编译器接受答案!但是我现在真的不明白为什么它最终会返回一个数组,因为当 startNum 和 endNum 都相同时它会返回一个数字。谁能解释一下这个程序吗?

function rangeOfNumbers(startNum, endNum) {
  console.log(startNum);
  console.log(endNum);

  if (endNum - startNum === 0) {
    console.log(startNum);

    return [startNum];

  } else {
    var numbers = rangeOfNumbers(startNum, endNum - 1);
    console.log(numbers);
    //numbers.unshift(endNum);
    numbers.push(endNum);
    return numbers;
  }
}
console.log(rangeOfNumbers(1, 5));

问题链接: https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/basic-javascript/use-recursion-to-create-a-range-of-numbers

【问题讨论】:

  • "当 startNum 和 endNum 相同时返回一个数字"。不,这不是一个数字,它是一个数组:return [startNum];。一个数字是return startNum;
  • endNum - startNum === 0 更清楚地写成endNum === startNum
  • 但是你不应该返回一个数字,因为递归调用者希望它返回一个数组,所以它可以调用numbers.push(endNum)

标签: javascript arrays function recursion


【解决方案1】:

但是我现在真的不明白为什么它最终会返回一个数组,因为当startNumendNum 相同时它会返回一个数字。

不,它没有。

return [startNum];

返回一个数组。 startNum 周围的 [] 创建了一个数组,其值为 startNum 作为其单个元素。

你显然把那句话误读为

return startNum;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    相关资源
    最近更新 更多