scala 函数参数(二)和递归函数

54 阅读2分钟

可变参数:用来接收同一类型的多个参数

1. 格式:参数类型*

2. 问题一:如何定义该函数,它能接收数量不定的参数,并计算它们的累加?

def getSum(args:Int*):Int={
  var sum=0
  for(i<-args){
    sum +=i
  }
 sum
}
def main(args: Array[String]): Unit = {
  val rst1=getSum(1,2,3)//6
  val rst2=getSum(1,2,3,4)//10
  val rst3=getSum(1,2)//3
  println(rst3,rst2,rst1)

}

3.要点:

(1) 类型要一致。

(2) 可变参数必须在列表的最后

递归函数

1. 递归:在函数内部,自己调用自己

2.特点:

(1)可能会导致死循环,一直调用自己

object basic35 {
  /**
   * 递归:在函数内部,自己调用自己
   *
   *
   * 特点:
   * 1.可能会导致死循环,一直调用自己
   */
  def f():Unit={
  println("f函数被调用了.......")
    f()
}
  def main(args: Array[String]): Unit = {
  f()
//    while(true){
//      println("f函数被调用了.......")
//    }
    println("main")

  }
}

递归函数的运用场景

1. 特点:

(1). 大问题可以拆结尾同样性质的小问题

(2). 问题拆解到足够小的时候,可以直接求解

2.举例:

(1)大任务:求1+2+3+4+......+99+100的和(5050)

def f(n:Int):Int={
   if(n==1){
     1
   }else{
     f(n-1)+n
   }

def main(args: Array[String]): Unit = {
 val rst=f(100)
 println(rst)

}

(2) 记f(n)=1+2+3+4+......+n

 def f(n:Int):Int={
    if(n==1){
      1
    }else{
      f(n-1)*n
    }
  }

def main(args: Array[String]): Unit = {
  val rst=f(4)// 4*3*2*1=24
  println(rst)

}

(3) f(100)=1+2+3+4+......+98+99+100

(4) f(99)=1+2+3+4+......+98+99

(5) f(98)=1+2+3+4+......+98

(6)f(100)=f(99)+100

(7)f(99)=f(98)=99

注意:f(1)=1(足够小的时候,可以直接求解) f(n)=f(n-1)+n