Scala递归函数(一)

45 阅读2分钟

递归函数的定义和格式

递归函数通常由两个主要部分组成:起始条件(或基线条件)和递归规则(或递归关系)。

起始条件

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

递归规则

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

基本格式

def recursiveFunction(parameters): ReturnType = {  

  // 起始条件  

  if (base condition) {  

    return base case result  

  } else {  

    // 递归规则  

    return recursiveFunction(smaller parameters)  

  }  

}

递归函数特点

递归:在函数内部 自己调用自己

特点:

  1. 可能会导致死循环: 一直调用自己
object work39 {
  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+...+99+100的和(5050)

举例
大任务:求 1+2+3+...+99+100的和(5050)
记f(n)=1+2+3+4+...+n

f(100)=1+2+3+...+98+99+100
f(99)=1+2+3+...+98+99
f(98)=1+2+3+...+98

f(100)=f(99)+100 
f(99)=f(98)+99
....
...

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(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)
  }
}