【问题标题】:factorial of a negative number exceeds maximum call stack size负数的阶乘超过最大调用堆栈大小
【发布时间】:2019-08-05 18:04:42
【问题描述】:

为什么在尝试将这个简单的阶乘函数应用于负数时是maximum call stack size exceeded

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

    return n * factorial(n - 1) 
} 

我知道阶乘函数适用于非负整数,但我想知道在调用此函数时内部/JavaScript 引擎中发生了什么,例如-1

【问题讨论】:

  • 您的if 应该测试n <= 0。否则递归将如何停止?
  • 它正在尝试计算 -1 * -2 * -3 * -4 * -5 * -6 * -7 ... 并且内存不足,因为它永远不会停止进行嵌套函数调用。

标签: javascript recursion math factorial callstack


【解决方案1】:

它无限运行,因为 (n == 0) 不满足

如果你传递一个负数

return n * factorial(n - 1) 

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

【讨论】:

    猜你喜欢
    • 2020-01-05
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 2014-08-19
    • 1970-01-01
    • 2015-10-24
    • 2015-12-29
    相关资源
    最近更新 更多