【JavaScript 】用递归函数计算1加到100

时间:2025-05-11 08:15:45

递归函数是指在函数的定义中调用函数自身的函数。它通常用来解决可以分解为更小、相似子问题的问题,例如计算阶乘、斐波那契数列、树的遍历等。

1、递归函数计算1加到100示例:

  1. function sumToN(current, target, accumulator = 0) {
  2. if (current > target) {
  3. return accumulator; // 当前数字超过目标数字时,返回累积和
  4. } else {
  5. return sumToN(current + 1, target, accumulator + current); // 递归调用
  6. }
  7. }
  8. // 调用函数,计算从1加到100的和
  9. const totalSum = sumToN(1, 100);
  10. console.log(totalSum); // 输出结果应该是 5050

方法传参分别是:

  • current 是当前处理的数字。
  • target 是我们想要加到的最终数字,在这里是100。
  • accumulator 是累加器,用来保存从1加到当前数字的总和。初始值设为0。

详解:当 current 超过 target 时,递归停止,函数返回累积的和。在每次递归调用中,我们将 current 加到 accumulator 上,并将 current 增加1,然后再次调用 sumToN 函数。

备注:这个递归函数可以计算任意正整数的累加和,只需将 target 参数设置为所需的数字即可。但是,由于JavaScript的调用栈大小限制,如果 target 设置得非常大,可能会导致栈溢出错误。在实际应用中,对于大范围的累加,迭代方法可能更加安全和高效。

 2、一个递归函数必须有两个主要部分:

  • 基本情况(Base Case): 这是递归调用结束的条件。没有基本情况或基本情况设计不当,递归将无限进行,导致栈溢出错误。
  • 递归情况(Recursive Case): 这里函数调用自身来解决问题的一部分,逐步逼近基本情况。

下面是一个计算阶乘的递归函数示例:

  1. function factorial(n) {
  2. if (n === 0 || n === 1) { // 基本情况
  3. return 1;
  4. } else { // 递归情况
  5. return n * factorial(n - 1);
  6. }
  7. }
  8. console.log(factorial(5)); // 输出 120

上面例子中,factorial(5) 会调用 factorial(4),factorial(4) 调用 factorial(3),依此类推,直到 factorial(1) 或 factorial(0),这时返回值开始回溯并计算结果。 

备注:递归函数可能导致大量的函数调用和栈空间使用,对于非常大的输入,可能会导致栈溢出。在实际应用中,需要考虑递归的深度,并在可能的情况下使用迭代或其他优化方法来避免这种问题。