递归函数(2)

67 阅读1分钟

递归函数:自己调用自己的函数

  • 适合用来解决一类问题:
    1. 可以被分解为类似子问题
    2. 当分解到足够小的时候,问题可以直接求解
object Base40 {
  // 定义一个函数,计算两数的和
  def sum(x: Int, y: Int): Int = {
    x + y
  }

  // 字面量语法: 看起来就像给变量赋值
  val sum1 = (x: Int, y: Int) => { x + y }
  /*
   * 要点:
   * 1. 有一个箭头符号 =>
   * 2. 省略def,省略了返回值类型
   *
   * 特殊的写法-简写
   * 1. 函数只有一句代码,可以省略 {}
   * 2. 如果参数只使用了一次,那么可以用 _ 来代替。要加上参数的类型
   * */
  val sum2 = (x: Int, y: Int) => x + y
  val sum3: (Int, Int) => Int = { _ + _ }
  val sum4 = (_: Int) + (_: Int)

  def main(args: Array[String]): Unit = {
    val a = 2
    val n = 5
    println(s"$a + $n = ${sum1(a, n)}")
    println(s"$a + $n = ${sum2(a, n)}")
    println(s"$a + $n = ${sum3(a, n)}")
    println(s"$a + $n = ${sum4(a, n)}")
  }
}
object Base41 {
  // 定义一个字面量函数,计算两个数的较大者
  val getMax = (x: Int, y: Int) => if (x > y) x else y
  // 定义一个字面量函数,计算两个数的较小者
  val getMin = (x: Int, y: Int) => if (x < y) x else y
  // test 这个函数,它的第一个参数是一个函数。
  val test = (x: (Int, Int) => Int, a: Int, b: Int) => {
    println("test被调用")
    println(x(a, b))
  }
  def main(args: Array[String]): Unit = {
    test(getMax, 1, 2)
  }
}
object Base42 {
  // 部分应用函数,在调用函数的时候,只传入一部分参数。
  val mul = (a: Int, b: Int, c: Int) => a * b * c

  def main(args: Array[String]): Unit = {
    val rst = mul(2, 3, 4)
    val f = mul(2, 3, _) // 第三个参数传入一个 _ ,表示:这个参数先空着,也不能返回最后的计算结果。它的返回值是一个函数,部分应用函数
    var rst1 = f(5) // mul(2,3,5)
    println(rst)
    println(rst1)
  }
}