可变参数:用来接收同一类型的多个参数
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