zoukankan      html  css  js  c++  java
  • learning scala Function Recursive Tail Call

    可以使用scala库,可以从字面上看出是在调用 递归函数:

    code

    import scala.util.control.TailCalls._
    
    
    
    
      val arrayDonuts: Array[String] = Array("Vanilla Donut", "Strawberry Donut", "Plain Donut", "Glazed Donut")
    
    
      println("
    Step : How to define a tail recursive function using scala.util.control.TailCalls._")
      def tailSearch(donutName: String, donuts: Array[String], index: Int): TailRec[Option[Boolean]] = {
        if(donuts.length == index) {
          done(None) // NOTE: done is imported from scala.util.control.TailCalls._
        } else if(donuts(index) == donutName) {
          done(Some(true))
        } else {
          val nextIndex = index + 1
          tailcall(tailSearch(donutName, donuts, nextIndex)) // NOTE: tailcall is imported from scala.util.control.TailCalls._
        }
      }
    
    
    
      println("
    Step : How to call tail recursive function using scala.util.control.TailCalls._")
      val tailFound = tailcall(tailSearch("Glazed Donut", arrayDonuts, 0))
      println(s"Find Glazed Donut using TailCall = ${tailFound.result}") // NOTE: our returned value is wrapped so we need to get it by calling result
    
      val tailNotFound = tailcall(tailSearch("Chocolate Donut", arrayDonuts, 0))
      println(s"Find Chocolate Donut using TailCall = ${tailNotFound.result}")

    resule:

    Step : How to define a tail recursive function using scala.util.control.TailCalls._
    
    Step : How to call tail recursive function using scala.util.control.TailCalls._
    Find Glazed Donut using TailCall = Some(true)
    Find Chocolate Donut using TailCall = None
    

      

  • 相关阅读:
    Fragment学习简介与生命周期研究
    POJ 2513 Colored Sticks 【Trie树】
    listView实时更新
    苹果技术支持联系方式
    文件中随机读取行问题
    hdu 4554
    hdu 4556
    离开通讯后就职互联网行业的一些感悟
    HDU1016:Prime Ring Problem
    dbgrideh通用打印
  • 原文地址:https://www.cnblogs.com/lianghong881018/p/11174361.html
Copyright © 2011-2022 走看看