在 JavaScript 中创建递归函数,核心是函数内部调用自身,并包含终止条件(基线条件)防止无限循环。
基本结构
function recursiveFunction(params) {
// 1. 基线条件:满足时停止递归
if (/* 终止条件 */) {
return /* 直接结果 */;
}
// 2. 递归步骤:调用自身,参数向基线条件靠近
return recursiveFunction(/* 修改后的参数 */);
}经典示例:计算阶乘
function factorial(n) {
// 基线条件:n 为 0 或 1 时返回 1
if (n <= 1) {
return 1;
}
// 递归步骤:n * (n-1)!
return n * factorial(n - 1);
}
console.log(factorial(5)); // 120示例:斐波那契数列
function fibonacci(n) {
if (n <= 1) return n; // 基线条件
return fibonacci(n - 1) + fibonacci(n - 2); // 递归步骤
}
console.log(fibonacci(6)); // 8注意事项
必须有基线条件,否则会栈溢出(
Maximum call stack size exceeded)。参数必须向基线条件变化,否则无限递归。
性能问题:递归可能重复计算(如斐波那契),可用记忆化优化。
尾递归优化:某些 JavaScript 引擎支持(严格模式下),但多数浏览器未实现,建议用循环替代深度递归。
尾递归示例(优化形式)
function factorialTail(n, acc = 1) {
if (n <= 1) return acc;
return factorialTail(n - 1, n * acc); // 尾调用
}总结
创建递归函数只需三步:
定义函数,内部调用自身。
设置明确的基线条件。
确保每次递归调用都向基线条件靠近。