下面这段代码是用 Scala 语言实现的递归求和功能,用于计算从 1 到 n 的所有整数之和(即 1+2+3+…+n),核心展示了递归算法的思想和应用。
核心逻辑:递归思想
递归是一种 “自己调用自己” 的编程技巧,适用场景如代码注释所述:
- 大问题拆分成同类小问题:比如 “计算 1 到 n 的和” 可以拆成 “计算 1 到 n-1 的和,再加上 n”(因为 1+2+…+n = (1+2+…+(n-1)) + n);
- 最小问题直接求解:当问题小到一定程度(比如 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) + 4f(3) = f(2) + 3f(2) = f(1) + 2f(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)
}