递归函数有两个主要部分:基本情况和递归情况。
- 基本情况:这是问题的简单情况,可以直接解决。
- 递归情况:这是问题的复杂情况,可以分解为更小的子问题,并通过递归调用自身来解决。
1. 计算阶乘 一个数的阶乘是所有小于及等于该数的正整数的乘积。
function factorial(n) {
// 基本情况
if (n === 0) {
return 1;
}
// 递归情况
else {
return n * factorial(n - 1);
}
}
console.log(factorial(5)); // 输出:120
2. 计算斐波那契数列 斐波那契数列是一个由0和1开始,之后的斐波那契数是前两个数的和的序列。
function fibonacci(n) {
// 基本情况
if (n <= 1) {
return n;
}
// 递归情况
else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
console.log(fibonacci(8)); // 输出:21
3. 遍历目录结构
function traverseDirectory(path) {
// 读取目录下的所有文件和文件夹
const files = readFilesInDirectory(path);
for (const file of files) {
if (isFile(file)) {
console.log('文件:', file);
} else if (isDirectory(file)) {
// 递归遍历子目录
traverseDirectory(file);
}
}
}
traverseDirectory('/path/to/directory');
4.计算最大公约数(GCD)公约数是两个或多个整数共有约数中最大的一个
function gcd(a, b) {
// 基本情况
if (b === 0) {
return a;
}
// 递归情况
else {
return gcd(b, a % b);
}
}
console.log(gcd(48, 18)); // 输出:6
5.递归实现字符串反转
function reverseString(str) {
// 基本情况
if (str.length === 0) {
return '';
}
// 递归情况
else {
return reverseString(str.slice(1)) + str[0];
}
}
console.log(reverseString('hello')); // 输出:'olleh'