javascript - 如何制作一个返回数组中每个整数的阶乘的函数

标签 javascript arrays function loops if-statement

我是编码新手,被问到这个我似乎无法正确回答的问题:

创建一个接受正整数数组并返回这些数字的阶乘数组的函数。

  E.g. [4, 3, 2] => [24, 6, 2]

一个数的阶乘是该数与其下方所有整数的乘积。

  E.g. the factorial of 4 is 4 * 3 * 2 * 1 = 24

如果数字小于0,则拒绝。

我创建的代码是这样的;

function getFactorials(nums) {
   if (nums === 0 || nums === 1)
      return 1;
   for (var i = nums - 1; i >= 1; i--) {
      nums *= i;
   }
   return nums;
} 

正在针对此测试运行代码;

describe("getFactorials", () => {
  it("returns [] when passed []", () => {
    expect(getFactorials([])).to.eql([]);
  });
  it("returns one factorial", () => {
    expect(getFactorials([3])).to.eql([6]);
  });
  it("returns multiple factorials", () => {
    expect(getFactorials([3, 4, 5])).to.eql([6, 24, 120]);
  });
  it("returns largest factorials", () => {
    expect(getFactorials([3, 8, 9, 10])).to.eql([6, 40320, 362880, 3628800]);
  });
});

我应该怎么做?

最佳答案

首先,创建一个递归函数来计算单个数字的阶乘:

function factorial(num) {
    if (num == 0 || num == 1) {
        return 1;
    }
    return num * factorial(num - 1);
}

然后要对数组执行此操作,只需使用 Array.prototype.map()像这样:

function getFactorials(arr) {
    var result = arr.map(x => factorial(x));
    return result;
}

这是一个演示:

 

function factorial(num) {
    if (num == 0 || num == 1) {
        return 1;
    }
    return num * factorial(num - 1);
}

function getFactorials(arr) {
    var result = arr.map(x => factorial(x));
    return result;
}

console.log(getFactorials([4, 8, 10])); 
console.log(getFactorials([]));
console.log(getFactorials([1, 2, 3, 4, 5]));

希望这对您有所帮助!

关于javascript - 如何制作一个返回数组中每个整数的阶乘的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53898962/

相关文章:

javascript - 在类创建/追加时将计数器的值增加 1

javascript - 将 Var 从 JavaScript 传递到 php ,错误 :

javascript - jquery 只允许一个元素上的一组类中的一个?

python - NumPy 中的引用行为明显不一致

PHP:按值长度对数组进行排序

c# - 如何比较两个字符串数组并找到公共(public)字符串数组的索引号并将其应用于第三个字符串数组?

javascript - 在 dojo 内部调用对象方法

c++ - C++ 中的自减运算符

javascript - 被调用的函数 A(args) 调用函数 B(),然后函数 B() 调用函数 A(args),如何做到这一点?

javascript - 为什么 JavaScript 允许将数组和函数存储在一个变量中?