题目 1:斐波那契数列
:实现递归函数计算第 n 个斐波那契数(斐波那契数列定义:
f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2))。
object Fibonacci {
// 计算第n个斐波那契数
def fib(n: Int): Int = {
if (n <= 0) 0 // 基线条件1:n=0时返回0
else if (n == 1) 1 // 基线条件2:n=1时返回1
else fib(n - 1) + fib(n - 2) // 递归:前两项之和
}
def main(args: Array[String]): Unit = {
println(fib(5)) // 输出:5(数列:0,1,1,2,3,5)
println(fib(10)) // 输出:55
}
}
题目 2:字符串反转
用递归实现字符串反转(例如输入 "abc",输出 "cba")。
object StringReverse {
// 递归反转字符串
def reverse(s: String): String = {
if (s.isEmpty) "" // 基线条件:空字符串直接返回
else reverse(s.tail) + s.head // 递归:反转剩余部分 + 首字符
}
def main(args: Array[String]): Unit = {
println(reverse("scala")) // 输出:"alacs"
println(reverse("hello")) // 输出:"olleh"
}
}
题目 3:计算阶乘
实现递归函数计算 n 的阶乘(定义:n! = n × (n-1) × ... × 1,0! = 1)。
object Factorial {
// 计算n的阶乘
def factorial(n: Int): Int = {
if (n <= 0) 1 // 基线条件:0! = 1
else n * factorial(n - 1) // 递归:n × (n-1)!
}
def main(args: Array[String]): Unit = {
println(factorial(5)) // 输出:120(5×4×3×2×1)
println(factorial(0)) // 输出:1
}
}
题目 4:求最大公约数(GCD)
用递归实现欧几里得算法求两个数的最大公约数(规则:gcd(a,b) = gcd(b, a%b),当b=0时返回a)。
object GCD {
// 计算a和b的最大公约数
def gcd(a: Int, b: Int): Int = {
if (b == 0) a // 基线条件:b=0时返回a
else gcd(b, a % b) // 递归:用b和a%b继续计算
}
def main(args: Array[String]): Unit = {
println(gcd(8, 12)) // 输出:4
println(gcd(17, 5)) // 输出:1
}
}