“要理解递归,首先要理解递归。” ——佚名
递归函数是在函数内部能够直接或间接调用自身的方法或函数。
假设一个函数一直调用自己结果是什么?单就上述情况而言,它会一直执 行下去。因此,每个递归函数都必须有基线条件,即一个不再递归调用的条件(停止点),以防 止无限递归。
function A(X) { const recursionAnswer = confirm('Do you understand recursion?'); if (recursionAnswer === true) { //基线条件 ,停止点 return true; } //递归调用 A(recursionAnswer); }
作为递归的第一个例子,我们来看看如何计算一个数的阶乘。数 n的阶乘,定义为 n!,表示 从 1到 n的整数的乘积。
5的阶乘表示为 5!,和 5 × 4 × 3 × 2 × 1相等,结果是 120。(注意一个概念定义 0!= 1,不是等于 0)
function factorial(x){
//基线
if(x == 0 || x==1){
return 1;
}
//递归调用
return x*factorial(x-1);
}
斐波那契数列
0、1、1、2、3、5、8、13、21、 34等数组成的序列。数 2由 1 + 1得到,数 3由 1 + 2得到,数 5由 2 + 3得到,以此类推。斐波 那契数列的定义如下。

//迭代的方法
function fibonacciIterative(n) {
if (n < 1) return 0;
if (n <= 2) return 1;
let fibNMinus2 = 0;
let fibNMinus1 = 1;
let fibN = n;
for (let i = 2; i <= n; i++) {
// n >= 2
fibN = fibNMinus1 + fibNMinus2;
// f(n-1) + f(n-2)
fibNMinus2 = fibNMinus1;
fibNMinus1 = fibN;
}
return fibN;
}
//递归的方法
function fibona(n){
if(n <= 2)
{
return 1;
}
if(n < 1)
{
return 0;
}
reurn fibona(n-1)+fibona(n-2);
}
来源:https://www.cnblogs.com/elexmiumiu/p/12206512.html