递归是指在函数的定义中使用函数自身的方法。
递归可以通过两种方式实现:
直接递归是指函数在调用自身时,使用与原始调用相同的参数。例如:
function factorial(n) {
if (n === 0) {
return 1;
} else {
return n * factorial(n-1);
}
}
上面的函数使用了直接递归来计算 n 的阶乘。
间接递归是指两个或多个函数彼此调用,直到其中一个函数调用回到原始函数。例如:
function isEven(n) {
if (n === 0) {
return true;
} else if (n === 1) {
return false;
} else {
return isEven(n - 2);
}
}
function isOdd(n) {
if (n === 0) {
return false;
} else if (n === 1) {
return true;
} else {
return isOdd(n - 2);
}
}
上面的例子展示了两个函数 isEven 和 isOdd,它们通过互相调用来确定一个数字是偶数还是奇数。
递归可以用于解决许多问题,例如:
需要注意的是,递归可能会导致性能问题和栈溢出。因此,在使用递归时,需要小心谨慎,并确保递归终止条件得到满足。