控制函数+递归
递归
// 递归在函数是函数式编程中最常见的算法,其包含三个主要成分
// 1. 函数调用自身
// 2. 函数有跳出递归的逻辑
// 3. 递归调用时应有规律
// 递归的一般写法
def test(num : Int) : Int = {
if ( num == 1) {
1
}else{
num * test(num - 1)
}
}
// 但是在scala中,一般的算法采用尾递归的方式实现,尚需继续理解
//尾递归,比线性递归多一个参数,这个参数是上一次调用函数得到的结果;
def test1(num : Int,r : Int) : Unit = {
if(num==1){
r
}else{
test1(num-1, num * r)
}
}
}
控制函数
名调用
package cn.lpc.Cheapter05
import scala.util.control.Breaks
object Scala_f7Abstract {
def main(args: Array[String]): Unit = {
// 将代码作为参数传递给函数
/*
def f = () =>{
println("f....")
10
}
*/
// 匿名函数
def f = () =>{
println("f....")
10
}
def test( op : => Unit)={
op
}
test{
println("123")
println("adsdas")
}
Array(1,23,4).foreach(println)
// 函数柯里化
// 第一个参数(f1 : =>Boolean),第二个参数(op : => Unit)
// 自定义while语句
@scala.annotation.tailrec
def whilex(f1 : =>Boolean)(op : => Unit) : Unit={
if (f1){
op
whilex(f1)(op)
}else{
}
}
whilex(true){
println("xxx")
}
}
惰性函数
当函数返回值声明为lazy时,函数的执行将被延迟,直到我们首次对此取值,该函数才会被执行,
def main(args: Array[String]): Unit = {
lazy val res = sum(10, 30)
println("----------------")
println("res=" + res)
}
def sum(n1: Int, n2: Int): Int = {
println("sum被执行。。。")
return n1 + n2
}