JS递归详解

84 阅读1分钟

递归函数有两个主要部分:基本情况和递归情况。

  • 基本情况:这是问题的简单情况,可以直接解决。
  • 递归情况:这是问题的复杂情况,可以分解为更小的子问题,并通过递归调用自身来解决。
  1. 计算阶乘 一个数的阶乘是所有小于及等于该数的正整数的乘积
function factorial(n) {  
    // 基本情况  
    if (n === 0) {  
        return 1;  
    }  
    // 递归情况  
    else {  
        return n * factorial(n - 1);  
    }  
}  
console.log(factorial(5)); // 输出:120

  1. 计算斐波那契数列 斐波那契数列是一个由0和1开始,之后的斐波那契数是前两个数的和的序列。
function fibonacci(n) {  
    // 基本情况  
    if (n <= 1) {  
        return n;  
    }  
    // 递归情况  
    else {  
        return fibonacci(n - 1) + fibonacci(n - 2);  
    }  
}  
console.log(fibonacci(8)); // 输出:21

  1. 遍历目录结构
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'