7.控制函数+递归

控制函数+递归

递归

// 递归在函数是函数式编程中最常见的算法,其包含三个主要成分
// 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
}
发布了118 篇原创文章 · 获赞 5 · 访问量 7167

猜你喜欢

转载自blog.csdn.net/resilienter/article/details/103834335