递归函数(1)

35 阅读1分钟

1.递归函数的起始条件

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

2.递归函数的递归规则

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

3.基本结构

def f(n:Int):Int = {
  if(n == 1)
  1
  else
    f(n - 1) + n
}
def main(args:Array[String]): Unit = {

  val rst = f(100)
  print(rst)

}

4.整数的阶乘

//阶乘 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(4)
  println(rst)
}

5.斐波那契数列

 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)
    println(rst)


  }

6.打印数字的各个位数、

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

7.练习题


 //f(n, A, B, C)
 //f(盘子的数量,起点,要借用的柱子,终点)
 //目标:在A上有n个盘子,我们需要借助B,把它们都移动到C
 
 /*
   如果:n == 1,直接从A移动到C
   否则:
 * 1.把n-1个盘子从A移动到C
 * 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')
 }