Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-超过最大调用堆栈大小_Javascript_Recursion - Fatal编程技术网

JavaScript-超过最大调用堆栈大小

JavaScript-超过最大调用堆栈大小,javascript,recursion,Javascript,Recursion,我有一个练习要完成,我应该使用递归函数(基本函数) 我使用nodejs来避免在浏览器中使用JS控制台 当我在此处尝试此功能时: function factorial(n) { if (n === 0) { return 0; }else { return (n * factorial((n-1)*(n-1))); } } 所以当我尝试时:console.log(阶乘(0));它输出“0”。 当我尝试记录任何高于0的数字时,它会显示: 超出了最大调用堆栈大小 谢谢

我有一个练习要完成,我应该使用递归函数(基本函数)

我使用nodejs来避免在浏览器中使用JS控制台

当我在此处尝试此功能时:

function factorial(n) {
  if (n === 0) {
    return 0;
  }else {
      return (n * factorial((n-1)*(n-1)));
  }
}
所以当我尝试时:console.log(阶乘(0));它输出“0”。 当我尝试记录任何高于0的数字时,它会显示:

超出了最大调用堆栈大小


谢谢。

这是因为
factorial((n-1)*(n-1))
输入的
n
超过2时,将返回更多的数字。因此,从那时起,它将是一个无限递归函数调用。但是,如果您将0、1或2放入,它将起作用

函数阶乘(n){
如果(n==0){
返回0;
}否则{
收益率(n*阶乘((n-1)*(n-1));
}
}
log(“fac0:+factorial(0));
console.log(“fac1:+factorial(1));
console.log(“fac2:+factorial(2));

console.log(“fac3:+factorial(3))在下一次递归中,您需要将值减少一倍,而不是使用减少值的乘积

如果值为零,则需要返回一,因为

函数阶乘(n){
如果(n==0){
返回1;
}
返回n*阶乘(n-1);
}
console.log(阶乘(0));
console.log(阶乘(1));
console.log(阶乘(2));
console.log(阶乘(3));

console.log(阶乘(10))通常递归函数要工作,需要有一个递归停止的基本情况。它还需要递归步骤比原始问题更简单,从而减少工作量,从而最终达到基本情况

看看你的代码:

function factorial(n) {
  if (n === 0) {
    return 0;
  }else {
      return (n * factorial((n-1)*(n-1))); // problem is here
  }
}
它有一个基本情况,即当
n
为零时返回
0
。因此,
factorial(0)//=>0
。现在让我们用
3
试试

factorial(3);                   // ==
3 * factorial((3-1)*(3-1));     // ==
3 * factorial(4);               // ==
3 * 4 * factorial((4-1)*(4-1)); // ==
3 * 4 * factorial(9);           // == 
要求递归是一个更简单的问题
factorial(4)
并不比
factorial(3)
简单,因此这种递归永远不会触及基本情况


如果要实现
factorial
,则基本情况应返回
1
,而不是
0
,并且递归总是比当前值小一个
factorial(2)
是一个比
factorial(3)
更简单的问题,因为它会加热基本情况,结果是
3*2*1*1

顺便说一句,您好,是的,我现在明白了,否则它会做一个无限循环。谢谢你的回复!