递归函数2025.10.15

44 阅读2分钟

object class6 {
  def main(args: Array[String]): Unit = {object Base45 {
    /**
     * 递归函数:自己调用自己的函数
     */
    // 定义函数
    def f(): Unit = {
      println("f.....被调用了")
      f() // 调用函数
    }

    println("f.....被调用了")
  }

    def main(args: Array[String]): Unit = {
      f()

      println("over")
    }
  }

递归函数

  • 递归是一种常用的解决问题的方法,特别适用于解决可以被分问题。递归函数通常由两个主要部分组成:起始条件(或基线条件、递归关系)。

  • 起始条件:一个递归的终止条件,确保递归不会无限进行。它并返回结果。

  • 递归规则:在这个部分,函数会调用自身,以解决一个更小的


object class21 {
  /**
   * 1. 可以被分解为类似子问题
   * 2. 当分解到足够小的时候,问题可以直接求解
   *
   * 任务:求 1 + 2 + 3 .... + 99 + 100 的和(5050)
   *
   * 分解 (1+2+3+4+....+99) + 100
   *
   * (1+2+3+4+....+98) + 99
   *
   * 任务分解到足够小:                                                                                                                                                                                                                                                                                                                                                                                       
   * 1 → 1
   * 通项公式: (n) = 1 + 2 + 3 .... + n
   *
   *         f(1) = 1
   *         f(n) = f(n-1) + n
   */

  // 1 + 2 + 3 + …… + n
  def f(n: Int): Int = {
    if (n == 1)
      1
    else
      f(n - 1) + n
  }

  def main(args: Array[String]): Unit = {
    val rst = f(100)
    println(rst)
  }
}

object class6
{
  /**
   * 递归函数:自己调用自己的函数
   * 适合用来解决一类问题
   * 1. 可以被分解为类似子问题
   * 2. 当分解到足够小的时候,问题可以直接求解
   */

  // 斐波那契数列
  def f(n: Int): Int = {
    if (n == 1) {
      1
    } else if (n == 2) {
      2
    } else {
     }
  }

  def main(args: Array[String]): Unit = {
    val rst = f(10) // 89
    println(rst)
  }
}

object class6
  {
    // f(n, A, B, C)
    // f(盘子的数量,起点,要借用的柱子,终点)
    // 目标:在A上有n个盘子,我们需要借助B,把他们都移动到C
    /*
      如果 n == 1: 直接从 A 移动到 C
      否则:
     * 1. 把n-1个盘子从A 移动到 B
     * 2. 把一个盘子从A移动到C
     * 3. 把n-1个盘子从B 移动到 C
     */
    def f(n: Int, A: Char, B: Char, C: Char): Unit = {
      if (n == 1) {
        println(s"${A} ---> ${C}")
      } else {
        f(n - 1, A, C, B)
        println(s"${A} ---> ${C}")
        f(n - 1, B, A, C)
      }
    }
    def main(args: Array[String]): Unit = {
      f(4, 'A', 'B', 'C')
    }
  }