无法理解递归模式及其函数调用

unable to understand recursive pattern and its function call

最近在JavaScript开始学习递归。

我从来没有在自己的函数中调用定义的函数。 这个叫什么?

我无法理解 recur(n - 1) 是如何工作的。

我试图检查它在 chrome 调试器中的工作方式,但也没有输出。

How here recur(n - 1) working?

function recur(n) {
 if(n === 1) return 1

 return n * recur(n - 1);
 // How here recur(n - 1) working?
 // 5 * 5 - 1 = 24
 // 4 * 4 - 1 = 15

}

recur(5);

所以当你执行 return n * recur(n - 1) 时,首先计算的是 recur(n - 1)。 发生的事情如下

recur(5) = 5 * recur(5 - 1)
recur(4) = 4 * recur(4 - 1)
recur(3) = 3 * recur(3 - 1)
recur(2) = 2 * recur(2 - 1)
recur(1) = 1 => the bottom of the recursion. Now it starts to go back:
recur(2) = 2 * recur(1) = 2
recur(3) = 3 * recur(2) = 3 * 2 = 6
recur(4) = 4 * recur(3) = 4 * 6 = 24
recur(5) = 5 * recur(4) = 5 * 24 = 120

基本上,直到函数 recur(n - 1) returns 一些具体的东西,比如你的案例 1 中递归的底部,该方法会再次调用 recur,然后再等等。到底部后,函数开始以相反的顺序解析。

递归函数正在计算nfactorial
该函数将调用自身,直到达到基本情况。
你有一个基本情况:当 n1 那么 return 1.

如果你用 5 调用它,那么它的工作原理如下:

recur(5) =>  
5 * recur(4) =>  
5 * 4 * recur(3) =>  
5 * 4 * 3 * recur(2) =>  
5 * 4 * 3 * 2 * recur(1) =>  
5 * 4 * 3 * 2 * 1 =>  
120

因此 n=5 的结果将为 120。