十月十五日课堂笔记

47 阅读1分钟

1.递归函数(自己调用自己可能会产生死循环)

object class1 {
  // 定义函数
  def f():Unit = {
    println("......被调用了")
    f() // 调用函数
  }
  def main(args: Array[String]): Unit = {
    f()
    println("over")
  }

}

2.递归的起始条件和递归规则

object class1 {
  //可以被分解为类似子问题
  //当分解到足够小的时候,问题可以直接求解
  //任务:求 1 + 2 + 3 +...... + 99 + 100 的和(5050)
  //分解:(1+2+3+4+.....+99) + 100
  //(1+2+3+4+.....+98) + 99
  //......
  //任务分解到足够小:
  //1 → 1
  //通项公式:f (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 res = f(100)
  println(res)
}

}

3修改代码,完成接乘的功能

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

4.f(n)是上n个台阶的方式

object class1 {
  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(100)
    println(rst)
  }
}

5.把输入的整数的各个位上的数值输出来!

object class1 {
  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
  }
}

6.课堂习题

object class1 {
  //如果:n == 1。直接从 A 移动到 C否则:
  //把 n-1 个盘子从 A 移动到 B
  //把一个盘子从 A 移动到 C
  //把 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')
  }
}