理解递归函数的基础知识

时间:2016-11-06 19:17:58

标签: javascript recursion

我似乎无法完全理解递归函数的基本原理。我们有这个代码:

function myself (n) {
if (n <= 1) {
    return 1;
}
return n * myself(n-1);
}
myself(5);

我得到5将乘以4等于20然后20再乘以3等等但是我不能得到的是怎么能&#39; n&#39;在一个函数中是两个不同的数字。

2 个答案:

答案 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参数的引用。