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

code

import scala.util.control.TailCalls._

  val arrayDonuts: Array[String] = Array("Vanilla Donut", "Strawberry Donut", "Plain Donut", "Glazed Donut")

  println("\nStep : 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 +
tailcall(tailSearch(donutName, donuts, nextIndex)) // NOTE: tailcall is imported from scala.util.control.TailCalls._
}
} println("\nStep : How to call tail recursive function using scala.util.control.TailCalls._")
val tailFound = tailcall(tailSearch("Glazed Donut", arrayDonuts, ))
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, ))
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

  

最新文章

  1. Java网络编程之流——readline()方法的bug
  2. 初始化git远程仓库步骤
  3. 深入解析Javascript中this关键字的使用
  4. 阿里云centos yum源更换,两个文件是从阿里云服务器拷贝出来的,可安装openvpn
  5. Ajax与Jquery题库
  6. android学习笔记52——手势Gesture,增加手势、识别手势
  7. HashSet中的元素必须重写equals方法和hashCode方法
  8. Can't get WebApplicationContext object from ContextRegistry.GetContext(): Resource handler for the 'web' protocol is not defined
  9. 你能识别这些科技公司的真假logo吗?
  10. 设置文字在div中垂直居中,使用line-height
  11. throws与throw的对比
  12. Hbase笔记——RowKey设计
  13. iOS开发——图形编程Swift篇&CAShapeLayer实现圆形图片加载动画
  14. JAVA并发,BlockingQuene
  15. 表达式树解析"框架"
  16. Omi教程-生命周期和事件处理
  17. [UWP]如何使用Fluent Design System (下)
  18. Java 集合-Arrays工具类的介绍
  19. u-boot编译
  20. android 开发 简单的小计算器

热门文章

  1. C语言处理字符串
  2. I2C基础及时序
  3. ssh使用
  4. Bipartite Checking CodeForces - 813F (线段树按时间分治)
  5. CentOS && Ubuntu 环境下 Docker 的安装配置
  6. Nginx快速自查手册
  7. python列表操作大全
  8. jQuery效果之滑动
  9. 【leetcode】544. Output Contest Matches
  10. 基于FTP 的本地Yum服务器配置