用js求数组内所有元素的阶乘(要详细算法)

请问下,用js求数组内所有元素的阶乘(要详细算法)
最新回答
风与纸片人

2024-06-04 13:25:14

/**
 *
 * Created by zhou2003737 
 */

/**
 * 判断是否为number类型数据
 * @param num
 * @returns {boolean}
 */
function isNumber(num) {
    return typeof num === 'number';
}

/**
 * 判断是否为number类型数组
 * @param numArr
 * @returns {boolean}
 */
function isNumberArray(numArr) {
    return Array.isArray(numArr) && numArr.every(isNumber);
}

/**
 * 阶乘
 * @param arr
 * @returns {*}
 */
function factorial(arr) {
    if(isNumberArray(arr)){
       return arr.reduce(function (preAll, current) {
           return preAll * current;
       }, 1)
    }
    throw new Error('参数必须为全部为Number数组!');
}


var a = [1,2,3,4,5];
var result = factorial(a);
console.log(result); // 120
a = ['1',2,3,4,5];
result = factorial(a); // Error: 参数必须为全部为Number数组!
追问
可以将结果返回一个新的数组里面吗?
追答
阶乘不是返回一个最终数据吗?你所说的阶乘是什么意思?
戏柚画西楼

2024-06-04 09:24:29

var arr = [1,3,5,7,9];
var a = 1;
for(var i = 0; i < arr.length; i++){
    if(arr[i] > 0) {
        for (var j = arr[i]; j > 0; j--){
            a = a * j;
        }
    console.log("阶乘:" +arr[i]+"="+ a )
    }
}
追问
可以将得到的结果返回一新的数组吗
追答
    function aa() {
        var arr = [1,3,5,7,9];
        var arr1 = new Array(arr.length);
     var a = 1;
     for(var i = 0; i < arr.length; i++){
         if(arr[i] > 0) {
             for (var j = arr[i]; j > 0; j--){
                 a = a * j;
             }
             arr1[i] = a
         }
     }
     return arr1;
    }