我是编码新手,被问到这个我似乎无法正确回答的问题:
创建一个接受正整数数组并返回这些数字的阶乘数组的函数。
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/