m

20 阅读2分钟

内容:

1. 函数参数的默认值;

2. 函数的变参;

3. 无参函数;

4. 递归函数。

函数参数的默认值

1. 定义有默认值的函数

格式:

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

scala
 体验AI代码助手
 代码解读
复制代码
object def04 {
  // 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,创建不带()的方法

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

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

scala
 体验AI代码助手
 代码解读
复制代码
def greet: Unit = {    
println("hello")

}    
greet // 不用加()

2,创建接受变参的方法

如何定义一个函数,它能接收数量不定的参数,并计算它们的累加?例如:getSum(1,2,3) 得到6, getSum(1,2,3,4) 得到10?

【分析】我们需要一个统一的容器,把参数都装起来

scala
 体验AI代码助手
 代码解读
复制代码
object def05 {
  // 传入不同的数量的参数
  // 第一个参数是学生的名字,从第二个参数开始,是这个学生的某些个学科的得分
  // 变参:允许传入不同的数,但是类型相同的参数
  // 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,80)
    greet("小米",80,88)
    greet("小猪",90)
  }
}

递归函数

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

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

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

1,计算累加

计算一个整数的累加是一个经典的递归问题。假设我们要计算 n 的累加和,记作 f(n) = 1 + 2 + 3 + ... + n ,其定义为:

scala
 体验AI代码助手
 代码解读
复制代码
object def06 {
  //适合解决一类问题:
  //  可以把大问题。拆分成同类的小问题
  //  当问题足够小的时候,可以直接求解
  //f(n) = 1+2+3+4+...+n
  //f(100)=1+2+3+4+...+99+100
  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)
  }
}

2,整数的阶乘

计算一个整数的阶乘是一个经典的递归问题。假设我们要计算 n 的阶乘,记作 n!=123*4...*n,其定义为:

起始条件:0! = 1

递归规则:n! = n * (n-1)!

scala
 体验AI代码助手
 代码解读
复制代码
object def07 {
  // 求阶乘
  // f(n) = 1*2*3*4*5...*n
  def f(n:Int):Int = {
    if(n == 0){
      1
    }else{
      n * f(n-1)
    }
  }

  def main(args: Array[String]): Unit = {
    val s = f(4)
    println(s)
  }
}