当谈到递归问题时,下面是三个经典的示例问题:
1. 阶乘计算:编写一个递归函数来计算给定正整数的阶乘。阶乘表示从1到该正整数的所有整数的乘积。
示例代码:
function factorial(n) {
if (n === 0) {
return 1;
} else {
return n * factorial(n - 1);
}
}
console.log(factorial(5)); // 输出 120
- 斐波那契数列:编写一个递归函数来计算斐波那契数列的第 n 个数字。斐波那契数列中,前两个数字是 0 和 1,后续的数字是前两个数字之和。
function fibonacci(n) {
if (n <= 1) {
return n;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
console.log(fibonacci(6)); // 输出 8
- 目录树遍历:假设你有一个嵌套的目录树结构,其中每个节点都有一个名称和一个子目录的数组。编写一个递归函数来遍历整个目录树,并输出所有的节点名称。
const directoryTree = {
name: 'Root',
directories: [
{
name: 'Folder 1',
directories: [
{
name: 'Subfolder 1',
directories: []
},
{
name: 'Subfolder 2',
directories: []
}
]
},
{
name: 'Folder 2',
directories: [
{
name: 'Subfolder 3',
directories: []
}
]
}
]
};
function traverseDirectory(tree) {
console.log(tree.name);
tree.directories.forEach((directory) => {
traverseDirectory(directory);
});
}
traverseDirectory(directoryTree);
输出:
Root
Folder 1
Subfolder 1
Subfolder 2
Folder 2
Subfolder 3
这些问题展示了递归在不同场景中的应用。递归函数通过调用自身来解决问题,并逐步向基本情况逼近,从而实现问题的解决。