递归(Recursion)是编程中的一个重要概念,特别是在JavaScript这样的函数式编程语言中。递归函数是指在函数的定义中直接或间接地调用自身的一种方法。递归通常用于解决可以分解为相似子问题的问题。
递归函数通常包含两个主要部分:
以下是一个计算阶乘的递归函数示例:
function factorial(n) {
// 基本情况
if (n === 0 || n === 1) {
return 1;
}
// 递归步骤
return n * factorial(n - 1);
}
console.log(factorial(5)); // 输出: 120
栈溢出错误:当递归调用层数过深时,可能会导致栈溢出错误。解决方法是:
重复计算:在某些递归算法中,可能会重复计算相同的子问题。解决方法是使用记忆化(Memoization)技术来存储已经计算过的结果,避免重复计算。
function memoize(fn) {
const cache = new Map();
return function (...args) {
if (cache.has(args.toString())) {
return cache.get(args.toString());
}
const result = fn.apply(this, args);
cache.set(args.toString(), result);
return result;
};
}
const fibonacci = memoize(function(n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
});
console.log(fibonacci(10)); // 输出: 55
在这个示例中,memoize
函数用于缓存 fibonacci
函数的计算结果,从而避免了重复计算,提高了效率。
领取专属 10元无门槛券
手把手带您无忧上云