递归函数

101 阅读1分钟

题目 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 {
  // 计算ab的最大公约数
  def gcd(a: Int, b: Int): Int = {
    if (b == 0) a        // 基线条件:b=0时返回a
    else gcd(b, a % b)   // 递归:用ba%b继续计算
  }

  def main(args: Array[String]): Unit = {
    println(gcd(8, 12))  // 输出:4
    println(gcd(17, 5))  // 输出:1
  }
}