递归函数

45 阅读1分钟

一、递归函数

自己调用自己的函数

object Base45 {
    def f():Unit = {
        println("f......被调用了")
        f()
    }


    def main(args: Array[String]): Unit = {
        f()
        println("over")
    }
}

求1+2+3+...+100的和 分解(1+2+3+...+99)+100/(1+2+3...+98)+99

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

把输入的整数1各个位数上的数值输出来

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

目标:在A上有n个盘子,我们需要借助B,把他们都移动到 C 如果: n == 1。直接从 A 移动到 C 否则:

  1. 把n-1个盘子从A 移动到 B
  2. 把一个盘子从A移动到C
  3. 把n-1个盘子从B 移动到 C
object Base49 {
  // f(n, A, B, C)
  // f(盘子的数量,起点,要借用的柱子,终点)
 

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