Scala递归函数,我真该控制你了

81 阅读2分钟

下面这段代码是用 Scala 语言实现的递归求和功能,用于计算从 1 到 n 的所有整数之和(即 1+2+3+…+n),核心展示了递归算法的思想和应用。

核心逻辑:递归思想

递归是一种 “自己调用自己” 的编程技巧,适用场景如代码注释所述:

  1. 大问题拆分成同类小问题:比如 “计算 1 到 n 的和” 可以拆成 “计算 1 到 n-1 的和,再加上 n”(因为 1+2+…+n = (1+2+…+(n-1)) + n);
  2. 最小问题直接求解:当问题小到一定程度(比如 n=1 时),可以直接得出结果(1 到 1 的和就是 1)。

函数定义(1):sum(n: Int): Int

该函数接收一个整数n,返回 1 到 n 的累加和

//适合解决一类问题:
  //   (1) 可以把大问题,拆分成同类的小问题
  //   (2) 当问题足够小的时候,可以直接求解

  // 1+2+3+4+.....n
  def sum(n:Int): Int = {
    if(n == 1){
      1
    }else {
      sum(n-1) + n
    }
  }

  def main(array: Array[String]): Unit = {
    var s = sum(100)
    println(s)
  }

函数定义(2):f(n: Int): Int

该函数接收一个整数参数n,返回从 1 到n的所有整数之和,核心逻辑基于递归思想

def f(n: Int): Int = {
  if (n == 1) {  // 递归的终止条件(最小问题的解)
    1
  } else {  // 大问题拆分为小问题(递归调用)
    f(n - 1) + n  // 1到n的和 = 1到n-1的和 + n
  }
}
  • 递归终止条件:当n == 1时,直接返回 1(因为 1 的累加和就是它本身)。这一步是递归的 “出口”,避免函数无限循环调用。
  • 递归调用逻辑:当n > 1时,函数通过调用自身计算f(n-1)(即 1 到 n-1 的累加和),再加上当前的n,得到 1 到 n 的总和。

主方法:main(array: Array[String]): Unit

主方法是程序的入口,用于调用f函数并打印结果:

def main(array: Array[String]): Unit = {
  val s = f(4)  // 调用函数计算1+2+3+4的和
  println(s)    // 打印结果:10
}
  • 这里调用f(4),即计算 1+2+3+4 的和。按照递归逻辑:

    • f(4) = f(3) + 4
    • f(3) = f(2) + 3
    • f(2) = f(1) + 2
    • f(1) = 1(终止条件)
    • 反向推导:f(2)=1+2=3 → f(3)=3+3=6 → f(4)=6+4=10
  • 最终打印结果为10

def f(n:Int): Int = {
  if(n == 1){
    1
  }else {
    f(n-1)+n
    
  }
}

def main(array: Array[String]): Unit = {
  val s = f(4)
  println(s)
}