递归函数

101 阅读1分钟

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

  • 起始条件:一个递归的终止条件,确保递归不会无限进行。它处理最简单的情况并返回结果.
  • 递归规则:在这个部分,函数会调用自身,以解决一个更小的子问题。
基本结构
def recursiveFunction(parameters): ReturnType = {  
  // 起始条件  
  if (base condition) {  
    return base case result  
  } else {  
    // 递归规则  
    return recursiveFunction(smaller parameters)  
  }  
}

案例1:计算累加

计算 n 的累加和,记作 f(n) = 1 + 2 + 3 + ... + n ,其定义为:

起始条件:f(1) = 1

递归规则:f(n)= n + f(n-1)

代码:

object day35 {
  def sum(n:Int):Int={
    if(n==1){
      1//起始条件
    }else{
      sum(n-1)//递归规则
    }
  }

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

案例2:计算 n 的阶乘

记作 n!=123*4...*n,其定义为:

起始条件:0! = 1

递归规则:n! = n * (n-1)!

代码如下:

object day36 {
  def f(n:Int):Int={
    if(n==1){
      1
    }else{
      f(n-1)*n
    }
  }

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

案例3:汉诺塔游戏

object day38 {
/*
   汉诺塔游戏

   A:起点,C表示终点,B表示可以借用的柱子
 */

  def f(n:Int,A:String,C:String,B:String):Unit={
    if(n==1){
      println(s"${A}${C}")
    }else{
      f(n-1,A,B,C)
      println(s"${A}${C}")
      f(n-1,B,C,A)
    }
  }

  def main(args: Array[String]): Unit = {
    f(3,"A","C","B")
  }
}