定义
递归:是一种自己调用自己的算法,将大型的复杂问题,层层转化为一个与原问题相似但规模较小的问题来求解。而在JavaScript中,函数直接或间接的调用自己,则该函数便称为递归函数。
递归使用
js">//计算阶乘
function factorial(n) {
// 基本情况
if (n === 0 || n === 1) {
return 1;
}
// 递归调用
else {
return n * factorial(n - 1);
}
}
console.log(factorial(5)); //120
递归函数一般包括两个关键部分:
例如,在计算阶乘时,基本情况可能是 n === 0 或 n === 1,此时我们知道阶乘的结果是 1。
递归分类
头递归
如果递归有在函数调用后要执行的代码语句,则它是头递归。头递归通常很难转换为循环语句。
js">function head(n) {
if (n == 0) {
return 0
}
head(n - 1)
console.log(n);
}
head(5) //1 2 3 4 5
尾递归
尾递归在函数调用之后不会有任何代码语句,通常在函数声明的末尾。尾递归很容易转换成循环语句。
js">function tail(n) {
if (n == 0) {
return 0
}
console.log(n);
tail(n - 1)
}
tail(5) //5 4 3 2 1
注意事项
递归函数需要注意几个要点:
js">//无递归出口
function fn(){
console.log(‘你好’);
fn();
}
fn();