关于递归--整理的三个常见题目

167 阅读1分钟

当谈到递归问题时,下面是三个经典的示例问题:

1. 阶乘计算:编写一个递归函数来计算给定正整数的阶乘。阶乘表示从1到该正整数的所有整数的乘积。

示例代码:

function factorial(n) {
  if (n === 0) {
    return 1;
  } else {
    return n * factorial(n - 1);
  }
}

console.log(factorial(5)); // 输出 120

  1. 斐波那契数列:编写一个递归函数来计算斐波那契数列的第 n 个数字。斐波那契数列中,前两个数字是 0 和 1,后续的数字是前两个数字之和。
function fibonacci(n) {
  if (n <= 1) {
    return n;
  } else {
    return fibonacci(n - 1) + fibonacci(n - 2);
  }
}

console.log(fibonacci(6)); // 输出 8
  1. 目录树遍历:假设你有一个嵌套的目录树结构,其中每个节点都有一个名称和一个子目录的数组。编写一个递归函数来遍历整个目录树,并输出所有的节点名称。
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

这些问题展示了递归在不同场景中的应用。递归函数通过调用自身来解决问题,并逐步向基本情况逼近,从而实现问题的解决。