接着函数参数问题的补充

30 阅读2分钟

在对函数参数问题进行补充时,我需要引入一个新的代码:

Int*:它也可以叫做可变参数,它允许函数接受可变数量的同类型参数。

注意事项:- 当作集合处理:虽然在调用时可以传入多个独立的参数,但在函数内部,可变参数本质上是一个 Seq 类型的集合。

  • 位置限制:一个函数只能有一个可变参数,并且可变参数必须是参数列表中的最后一个参数。例如下面这样的定义是错误的
  • 与数组的关系:如果已经有一个数组,想要将数组元素作为可变参数传入函数,可以在数组变量后面加上 :_*

举个例子:当我需要求出某一次考试的平均值时,可以输入以下代码:

object base38 {
  // 传入不同的数量的参数
  // 第一个参数是学生的名字,从第二个参数开始,是这个学生的某些学科的得分
  // 要求:允许传入不同个数,但是类型相同的参数
  // 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)
  }
}

运行结果如图所示:

image.png

假如我需要求一些数字的和时,我们可以选择打出以下代码:

object base39 {
  // 1.可能会陷入死循环:
  // 2. 适合解决一类问题:
  // (1)可以把大问题,拆分成同类的小问题
  // (2)当问题足够小的时候,可以直接求解
  // f(n) = 1 + 2 + 3 + 4 + ... + n
  // f(100) = 1 + 2 + 3 + 4 + ... + 99 + 100
  // 1+2+3+...+98+99  f(99)
  //         f(98)
  // f(1) = 1
  def test(): Unit = {
  }
  // 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 result = sum(10)
    println(s"110的和为:$result")
  }
}

运行结果如图所示:

image.png 当我需要依靠代码去计算整数的阶乘时,可以打出以下代码: