函数参数

52 阅读2分钟

一,函数的参数默认值

1,定义有默认值的函数

格式:
def 函数名(参数1:类型1=默认值1,参数2:类型2=默认值2)

示范:

object day22 {
  // gender:
  def greet(name:String="哈哈",  age:Int=18, gender:String="女"):Unit = {
    println(s"我是${name},我今年${age},${gender}")
  }

  def main(args: Array[String]): Unit = {
    greet("小花",18) // 默认值
    greet("小明",20,"男")
    greet()
  }
}

1.png

指定参数名:

object day23 {
  // gender:
  def greet(name:String="哈哈",  age:Int=18, gender:String="女"):Unit = {
    println(s"我是${name},我今年${age},${gender}")
  }

  def main(args: Array[String]): Unit = {
    greet("小花",18) // 默认值
    greet("小明",20,"男")
    greet()


    // 设置age为20,其他采用默认值
    // 传参数的时候,指定参数的名字
    greet( age = 20)
    greet( gender = "男", age = 20)
  }
}

二,创建不带()的方法

如果函数没有参数,可以省略定义函数时的( )

格式:def 方法名:[返回类型]={}。

错误错点代码:

object day24 {
  // 如果函数不需要参数,可以在定义函数的时候,省略()
  def greet:Unit = {
    println(s"hahahahaha~~~~~~")
  }

  def main(args: Array[String]): Unit = {
    // 如果在定义函数的时候没有写(),那么 在调用函数的时候,也不要加()
    greet()
  }
}

错误代码输出结果:

2.png

三,创建接受变参的方法

object day26 {
  // 传入不同的数量的参数
  // 第一个参数是学生的名字,从第二个参数开始,是这个学生的某些学科的得分
  // 变参: 允许传入不同个数,但是类型相同的参数
  //Int*
  // array 数组
  def greet(name:String, score:Int*):Unit = {
    // score 是一个列表
    var total:Double = 0
    for(i <- score){
      total += i
    }

    val avg = total / score.length
    println(s"${name}, 平均分是:${avg}")
  }

  def main(args: Array[String]): Unit = {
    greet("小花",90,100,98,100,60)
    greet("小明",80,88)
    greet("小张",90)
  }
}

在Scala中创建接受变参的方法为:参数类型*,这种方式只能接受同一类型的参数。

Int* 是重点

3.png

四,递归函数的定义和格式

递归是一种常用的解决问题的方法,特别适用于解决可以被分解为类似子问题的问题。递归函数通常由两个主要部分组成:起始条件(或基线条件)和递归规则(或递归关系)。

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

递归规则:在这个部分,函数会调用自身,以解决一个更小的子问题。

4.png

起始条件:f(1) = 1

递归规则:f(n)= n +  f(n-1)
计算累加:

object day26 {
  // 1 + 2 + 3 + 4 + ... + n
  def sum(n:Int):Int = {
    if(n == 1){
      1
    } else {
      sum(n-1) + n
    }
  }
  def main(args: Array[String]): Unit = {
    val s = sum(100)
    println(s)
  }
}

例题:

求阶乘:

object day27 {
  // 求阶乘
  // f(n) = 1 * 2 * 3 * 4 * 5 *  ... * n
  def f(n:Int):Int = {
    if(n == 1){
      1
    } else {
      f(n-1)*n
    }
  }
  def main(args: Array[String]): Unit = {
    val s = f(4)
    println(s)
  }
}

输出结果:

5.png