我似乎无法完全理解递归函数的基本原理。我们有这个代码:
function myself (n) {
if (n <= 1) {
return 1;
}
return n * myself(n-1);
}
myself(5);
我得到5将乘以4等于20然后20再乘以3等等但是我不能得到的是怎么能&#39; n&#39;在一个函数中是两个不同的数字。
答案 0 :(得分:6)
怎么可能&#39; n&#39;在一个函数中是两个不同的数字
函数调用存在变量范围,而不是函数定义。
对n
的每次调用都会获得一个自己的n
变量,这与之前存在的current
无关。
答案 1 :(得分:2)
n
是一个局部变量。您的示例将执行,如下所示。
myself(5)
return 5 * myself(4)
return 5 * (return 4 * myself(3))
return 5 * (return 4 * (return 3 * myself(2)))
return 5 * (return 4 * (return 3 * (return 2 * myself(1))))
return 5 * (return 4 * (return 3 * (return 2 * return 1)))
return 5 * (return 4 * (return 3 * (return 2 * 1)))
return 5 * (return 4 * (return 3 * 2))
return 5 * (return 4 * 6)
return 5 * 24
return 120
n
在每次调用时都包含对number参数的引用。