Javascript 负数的阶乘超过了最大调用堆栈大小

Javascript 负数的阶乘超过了最大调用堆栈大小,javascript,recursion,math,factorial,callstack,Javascript,Recursion,Math,Factorial,Callstack,当尝试将此简单的阶乘函数应用于负数时,为什么超过了最大调用堆栈大小 function factorial(n) { if (n == 0) { return 1 } return n * factorial(n - 1) } 我知道阶乘函数是用于非负整数的,但我想知道当调用此函数(例如-1)时,JavaScript引擎内部/内部会发生什么 由于(n==0)未满足要求,因此它以内联方式运行 如果你传递一个负数 return n * factor

当尝试将此简单的阶乘函数应用于负数时,为什么超过了最大调用堆栈大小

function factorial(n) { 
    if (n == 0) { 
        return 1 
    }

    return n * factorial(n - 1) 
} 
我知道阶乘函数是用于非负整数的,但我想知道当调用此函数(例如
-1
)时,JavaScript引擎内部/内部会发生什么

由于(n==0)未满足要求,因此它以内联方式运行

如果你传递一个负数

return n * factorial(n - 1) 
递归调用带有更多负数的阶乘函数,因此(n==0)条件不满足

它会因(n==0)不满足而运行

如果你传递一个负数

return n * factorial(n - 1) 

递归调用带有更多负数的阶乘函数,从而(n==0)条件不满足

您的
if
应该测试
n它试图计算
-1*-2*-3*-4*-5*-6*-7…
并且它会耗尽内存,因为它从不停止嵌套函数调用。您的
if
应该测试
n它正在尝试计算
-1*-2*-3*-4*-5*-6*-7…
和它的内存不足,因为它从未停止过嵌套函数调用。