阶乘递归,给出未定义

时间:2019-05-19 09:10:55

标签: javascript

我正在尝试简单地找到递归阶乘

dns = model.layers[-1].output

它正在提供未定义,不确定原因,需要帮助。

plnkr

1 个答案:

答案 0 :(得分:1)

在缺少的return语句旁边,有一些注释:

  • 对结果使用默认值。这样就可以在没有给定起始值的情况下调用该函数,并且只允许使用一个参数。

  • 仅进行一次递归调用,而不将elsereturn结合使用。 return语句省略了以下else语句。只需继续使用没有else部分的代码即可。

  • 在函数末尾返回一个递归调用,以允许使用编译器获取TCO(尾调用优化)。这不会扩展堆栈,因为最后一次调用将替换为实际的递归调用。此优化可能未实际实现。

  • 如果只需要减小的值而无需再次使用减小的值,则不要使用减量运算符。

  • 将计算移到函数调用中。

function factorial(num, result = 1) {
    console.log('num', num);
    if (num === 0) return result;
    return factorial(num - 1, result * num);
}

console.log(factorial(3))