【问题标题】:Check if number is not integer in recursion js [duplicate]检查递归js中的数字是否不是整数[重复]
【发布时间】:2021-04-16 13:27:01
【问题描述】:

我有一个递归函数,可以计算给定数字的阶乘。

function findFactorial(num) {
  if (num < 1 || !num.isInteger) {
    return "error";
  } else {
    return num * findFactorial(num - 1);
  }
}

console.log(findFactorial(7));

我想检查数字是否小于 1 或不是整数 - 并为它返回“错误”。 我在上面尝试的代码不起作用,每次调用函数时都会给我“错误”。

【问题讨论】:

标签: javascript


【解决方案1】:

您的代码中有三个问题。

  • 首先,您的代码将始终返回“错误”,因为您将始终到达 num == 0 的位置。
  • 其次你没有终止条件(除了错误的return "error"),所以递归永远不会返回有效值。
  • 最后但同样重要的是,您尝试调用函数isInteger(),但num 对象不存在此函数。

这是有效的代码:

function findFactorial(num) {
  if (isNaN(num) || num < 1) {
    return "error";
  }
  if (num == 1) {
    return 1;
  }
  return num * findFactorial(num - 1);
}

console.log(findFactorial(7));

【讨论】:

    【解决方案2】:

    num.isInteger 函数在 js 中不可用。我们有Number.isInteger(val)

    需要一些代码更改。

    • 当数字不是整数或负数时,我们只需要返回error
    • 当一个数达到 1 时,我们需要自己返回 1 以获取阶乘值。

    请看下面的代码。

    function findFactorial(num) {
      if (!Number.isInteger(num) || num < 0) {
        return "error";
      } else if (num <= 1) {
        return 1;
      }
      else {
        return num * findFactorial(num - 1);
      }
    }
    
    console.log(findFactorial(7));
    console.log(findFactorial(-5));
    console.log(findFactorial("six"));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-04
      • 2021-07-14
      • 2019-03-15
      • 2016-02-18
      • 2012-10-14
      • 1970-01-01
      • 2017-10-30
      • 1970-01-01
      相关资源
      最近更新 更多