递归函数

40 阅读1分钟

归函数的定义和格式

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

起始条件

一个递归的终止条件,确保递归不会无限进行。它处理最简单的情况并返回结果。

递归规则

在这个部分,函数会调用自身,以解决一个更小的子问题。

object z23 {
  /**
   *  递归:在函数内部 自己调用自己
   *
   *  特点:
   *  1.可能会导致死循环:一直调用自己
   */

  def f():Unit = {
    println("f函数被调用了......")

    f()
  }
  def main(args: Array[String]): Unit={
    f()
//    while(true){
//      println("f函数被调用了......")
//    }
    println("main")
  }
}

递归函数的应用场景

特点

  1. 大问题可以拆解为同样性质的小问题
  2. 问题拆解足够小的时候,可以直接求解

案例1:

举例 求1+2+3+4+......+100的和

object z24 {
  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)
  }
}

案例2:

举例: 记 f(n)=1 * 2 * 3 * 4 * ... * n

object work41 {
  /**
   * 举例
   * 记 f(n)=1*2*3*4*...*n
   *
   * f(1)=1 (足够小的时候,可以直接求解)
   * f(n)=f(n-1)*n
   *
   */
  def f(n:Int):Int = {
    if(n == 1){
      1
    } else {
      f(n-1) * n
    }
  }

  def main(args: Array[String]): Unit = {
    val rst = f(4) // 4*3*2*1 = 24
    println(rst)
  }
}