【发布时间】:2021-10-24 01:56:17
【问题描述】:
Gif for the debugger in console
所以,当运行这个时,我有点困惑fac 参数是如何保持状态的。我对阶乘(4)的理解是
4 * (4-1) // 4 * 3 = 1212 * (3-1) // 12 * 2 = 2424 * (2-1) // 24 * 1 = 24
function factorial(fac){
debugger
if(fac == 1)
return fac
return fac * factorial(fac-1)
}
factorial(4)
【问题讨论】:
-
它没有保持任何状态,函数被递归调用了好几次
-
那么,它如何理解参数的当前值是什么,我正在尽可能地清除。
-
状态在JS为你管理的函数调用栈中。如果您将
factorial转换为不依赖堆栈的尾递归函数,您可能会更好地理解它。提示:您需要第二个参数作为发生乘法的累加器。 -
@Nick 当然它确实在递归调用期间保持
fac变量的状态
标签: javascript recursion functional-programming factorial