无法理解递归模式及其函数调用
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,然后再等等。到底部后,函数开始以相反的顺序解析。
递归函数正在计算n
的factorial。
该函数将调用自身,直到达到基本情况。
你有一个基本情况:当 n
是 1
那么 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。
最近在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,然后再等等。到底部后,函数开始以相反的顺序解析。
递归函数正在计算n
的factorial。
该函数将调用自身,直到达到基本情况。
你有一个基本情况:当 n
是 1
那么 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。