递归函数

37 阅读2分钟
object t42 {
//递归函数:自己调用自己的函数
 //定义函数
 def f():Unit = {
  println("f....被调用了")
  
  f()
 }
 def main():Unit = {
  f()//调用函数
  
  println("over")
 }
}
object t43 {
/**
 * 1.可以被分解为类似子问题
 * 2.当分解到是足够小的问题,问题可以直接求解
 * 任务:求  1+2+3+。。。+99+100的和(5050)
 * 分解(1+2+3+。。。+99)+100
 *通项公式:(n) = 1+2+3...+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(100)
  println(rst)//结果:1+2+3+...+100=5050
 }
}
object t44 {
//阶乘 n!= 1*2*3....*n
//n = 1 ->  1
 //f(n) = 1*2*3...*(n-1)*n
 //f(n-1) = 1*2*3...*(n-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)//结果:1*2*3*4=24
  println(rst)
 }
}
object t45 {
  def f (n:Int):Int = {
    if(n==1){
      1
    }
    else if (n == 2) {
      2
    }else {
      f(n-1) + f(n-2)
    }

  }

  def main(args: Array[String]): Unit = {
    val rst = f(10)//结果:89
    println(rst)
  }
}
object t46 {
def f(n:Int):Unit = {
  if(n<9){
    println(n)
  } else {
    f(n/10)
    println(n%10)
  }
}

  def main(args: Array[String]): Unit = {
    f(12345)//结果:1 2 3 4 5
  }
}
object t47 {
  //f(n,A,B,C)
  //f(盘子的数量,起点,要借用的柱子,终点)
  //目标:在A上有n个盘子,我们需要借助B,把他们都移动到C
  //如果:n == 1*直接从A移动到C
  //否则:
  //1.把n-1个盘子从A移动到B
  //2.把一1个盘子从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")
  }
}