我试图使用递归和无循环得到所有数组(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();
答案 0 :(得分:0)
您的recur()
函数可能会将n
作为参数,否则n
将永远不会1
(if(n == 1) return 1;
)并且您的函数将继续调用自身直到它崩溃。
请尝试function recur(n){
。
答案 1 :(得分:0)
如果你有数组,你应该使用循环。
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;
答案 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);
}