【问题标题】:Array Factorial. Getting NaN Output. Javascript数组阶乘。获取 NaN 输出。 Javascript
【发布时间】:2015-02-03 06:03:59
【问题描述】:
var array = [5,4,3,2,1];

document.write("<br>Facorial: " + factorial(array));

//factorial function Ex. 5! = 5*4*3*2*1 = 120

function factorial(params){
        var f = 1;
        for (i = 0; i <= params.length; ++i){
            for (j = 1; j <= params[i]; j++){
                f = f * params[j];
            }
        }
        return f;
    }

我正在尝试制作一个程序,其中用户在数组中输入一堆随机数,然后程序计算关于这些数字的不同内容。

我正在尝试对数组中的每个单独的数字进行分解,然后以相同的形式呈现。

我现在如何拥有它,我正在为我的输出获取 NaN。

我做错了什么?还是我做得不够?

电流输出

Factorial: NaN

我想要什么

Factorial: 120,24,6,2,1

【问题讨论】:

    标签: javascript arrays nested-loops nan factorial


    【解决方案1】:

    您可以使用从 Felix Kling 的回答 here 获取的 fact 函数,然后使用 Array.map 然后 Array.join

    function fact(x) {
       if(x == 0) return 1;
       return x * fact(x-1);
    }
    function factorial(arr){
       var result = arr.map(fact);
       return result.join(",");
    }
    

    【讨论】:

      【解决方案2】:

      您的代码中有错误(或至少:奇怪)的东西:

      • f 是一个数字。不过,您似乎希望您的函数返回一个数组?
      • i &lt;= params.length 应该是 i &lt; params.length。数组索引从 0 开始,到 length-1 结束。
      • 您将累加器变量与params[j] 相乘 - 其中j 是任何小于当前查看的数组项的数字。这就是你得到NaN 的原因——当i == 0 时,它会循环直到j == 5,而params[5]undefined——导致NaN 结果。

      你想要的似乎是

      function factorial(n) {
          // function that computes the number n!
          var acc = 1;
          while (n > 0) acc *= n--;
          return acc;
      }
      function facArray(params) {
          var f = [];
          for (var i=0; i<params.length; i++)
              f[i] = factorial(params[i]);
          return f;
      }
      

      【讨论】:

        【解决方案3】:

        试试这个代码

        var array = [5,4,3,2,1];
        
        document.write("<br>Facorial: " + factorial(array).join(','));
        
        function factorial(params){
                var op = [];
                for (i = params.length - 1; i >= 0 ; i--){
                    var f = 1;
                    for (j = 0; j < i; j++){
                        f = f * params[j];
                    }
                     op.push(f);
                }
               return op;
            }
        

        【讨论】:

          【解决方案4】:

          这就是while:D

          var array = [5,4,3,2,1];
          var len = array.length-1;
          while(len--) {
              array[len] *= array[len+1];
          }
          
          array;// [120, 24, 6, 2, 1]
          

          只需从最后一个到第一个相乘。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-11-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-24
            • 2019-05-21
            相关资源
            最近更新 更多