以递归方式获取所有数组的阶乘

时间:2017-05-12 07:48:21

标签: javascript recursion

我试图使用递归和无循环得到所有数组(recurArray)的阶乘。 我收到错误"超出最大调用堆栈大小" 我认为for循环逻辑存在一些问题,如果有人可以解释错误原因以及如何解决它会有所帮助

感谢。

//代码

function recur(){
 var n;
 var result;
 if(n == 1)
 return 1;
 var recurArray = [5,6,7,8,9];
 for (var i = 0;i<recurArray.length;i++){
    n = recurArray[i];
    result = n * recur(n-1);
    n=n-1;

 }
 console.log("val of n " + n  + "value of i " + i);
 return result;

}
recur();

3 个答案:

答案 0 :(得分:0)

您的recur()函数可能会将n作为参数,否则n将永远不会1if(n == 1) return 1;)并且您的函数将继续调用自身直到它崩溃。

请尝试function recur(n){

答案 1 :(得分:0)

如果你有数组,你应该使用循环。

&#13;
&#13;
function recur(x) {
   if(x==0) {
      return 1;
   }
   return x * recur(x-1);
}

function getFact() {
    var recurArray = [5,6,7,8,9];
    for (var i = 0;i<recurArray.length;i++){
      console.log(recur(recurArray[i]));
    }
}

getFact();
&#13;
&#13;
&#13;

答案 2 :(得分:0)

在每次出现时你重置了阶乘,所以它继续滚动事实(5)你需要有一个计算阶乘的函数和另一个用于数组循环的函数,如下所示:

function recur(n){
   if(n == 1){
      return 1;
   } else {
      return n* recur(n-1);
   }
}


var recurArray = [5,6,7,8,9];
for (var i = 0;i<recurArray.length;i++){
    n = recurArray[i];
    result = recur(n);
    console.log("factorial of n " + n  + " is " + result);
}