JavaScript递归函数在实际应用中有许多用途,以下是一些常见的例子:
function flattenArray(arr) {
return arr.reduce((acc, val) => {
return acc.concat(Array.isArray(val) ? flattenArray(val) : val);
}, []);
}
function traverseTree(node) {
console.log(node.value);
if (node.children) {
node.children.forEach(child => traverseTree(child));
}
}
function factorial(n) {
if (n === 0 || n === 1) {
return 1;
}
return n * factorial(n - 1);
}
function fibonacci(n) {
if (n <= 1) {
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
function hanoi(n, source, target, auxiliary) {
if (n > 0) {
// 将 n-1 个盘子从 source 移动到 auxiliary,以 target 作为辅助柱子
hanoi(n - 1, source, auxiliary, target);
// 将第 n 个盘子从 source 移动到 target
console.log(`Move disk ${n} from ${source} to ${target}`);
// 将 n-1 个盘子从 auxiliary 移动到 target,以 source 作为辅助柱子
hanoi(n - 1, auxiliary, target, source);
}
}
这些例子展示了递归函数在JavaScript中的强大功能和广泛应用。递归方法使得代码更简洁、易于理解,但在处理大量数据时可能会导致性能问题。在这种情况下,可以考虑使用迭代方法或将递归转换为尾递归。