[Notes] 简单的 Scala 尾递归函数

以斐波那契数列的计算函数为例, 实践 Scala 中尾递归函数的编写

object Test extends App {
  def fib(n: Int): Int = {
    @annotation.tailrec
    def fib_iter(f0: Int, f1: Int, cnt: Int): Int =
      if (cnt <= 0) f0
        else fib_iter(f1, f0+f1, cnt-1)
    fib_iter(0, 1, n)
  }

  (0 until 10).foreach { n => println(fib(n)) }
}

原文地址:https://www.cnblogs.com/wander4096/p/9164222.html

时间: 2024-10-08 23:40:45

[Notes] 简单的 Scala 尾递归函数的相关文章

Scala匿名函数语法

Scala中定义匿名函数的语法是相当轻量的.下面的表达式就定义了一个接受一个Int 类型输入参数的匿名函数: 上述定义的匿名函数,其实是下面这种写法的简写: 简单调用如下: 我们当然也可以定义多个参数的匿名函数: 多参数使用Function语法来定义如下   也可以定义没有参数的匿名函数: 匿名函数的Function语法的实现如下:   用来表示上述三个匿名函数(一个参数,两个参数,无参数)的函数类型也很简单 上述三个函数的函数类型分别表示如下: Int => Int (Int,Int) =>

在Scala中函数和方法有什么区别

方法可以作为一个表达式的一部分出现(调用函数并传参),但是方法(带参方法)不能作为最终的表达式, 但是函数可以作为最终的表达式出现: scala> //定义一个方法 scala> def m(x:Int) = 2*x m: (x: Int)Int scala> //定义一个函数 scala> val f = (x:Int) => 2*x f: Int => Int = <function1> scala> //方法不能作为最终表达式出现 scala&g

一个简单的java回调函数的实现

回调函数 回调函数涉及的3个函数 登记回调函数 回调函数 响应回调函数 简单的解释 你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货.在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件.回答完毕.来自知乎点击打开链接 代码的实现 首先有一个接口 interface CallB

游戏服务器之多进程架构通信 协程切换只是简单地改变执行函数栈,不涉及内核态与用户态转化,也涉及上下文切换,

游戏服务器之多进程架构通信 https://gameinstitute.qq.com/community/detail/124098 https://www.zhihu.com/question/23508968 游戏服务器与普通服务器有什么区别? 游戏开发中的TCP.UDP.HTTP.WebSocket四种网络通讯协议对比 https://gameinstitute.qq.com/community/detail/127562 https://www.jianshu.com/p/4eb37c1

scala中函数简单使用记录

object funcHighLevel { def main(args: Array[String]): Unit = { // 创建一个匿名函数 val sayFunc = (name: String) => println("hello ," + name) // 定义一个方法传入一个函数 def greeting(func: (String) => Unit, names: String) { func(names) } // 在定义一个 name,age是参数 v

scala实战学习-尾递归函数

求 $$ \Sigma\sideset{^b_a}f(x) $$ object sumfunc{ def sum(f: Int => Int)(a: Int)(b:Int): Int = { @annotation.tailrec def loop(n: Int,acc: Int): Int = { if(n > b){ println(s"n=${n},acc=${acc}") acc //当计算到b值,返回acc值 }else{ println(s"n=${n

Scala的函数

 3.   FP 3.1.     函数 函数的地位和一般的变量是同等的,可以作为函数的参数,可以作为返回值. 传入函数的任何输入是只读的,比如一个字符串,不会被改变,只会返回一个新的字符串. Java里面的一个问题就是很多只用到一次的private方法,没有和使用它的方法紧密结合:Scala可以在函数里面定义函数,很好地解决了这个问题. 3.1.1.  函数定义 函数和方法一般用def定义:也可以用val定义匿名函数,或者定义函数别名. def m0(x:Int) = x*x val m1

Scala应用函数

我们使用“_” 来代替单个的参数,实际上你也可以使用“_”来代替整个参数列表,比如说,你可以使用 print _ 来代替 println (_). someNumbers.foreach(println _) Scala编译器自动将上面代码解释成: someNumbers.foreach( x => println (x)) 因此这里的“_” 代表了Println的整个参数列表,而不仅仅替代单个参数. 当你采用这种方法使用“_”,你就创建了一个部分应用的函数(partially applied

[笔记]几个简单有用的PHP函数

收藏几个简单的PHP函数,分别用于对象到数组转换.json到php数组转换功能.curl模拟POST以及根据链接获取内容.不直接使用json_decode()的原因是php json_decode()函数对\xA312此类字符支持不好. 1. 对象到数组转换 function objToArr($obj){ if(!is_object($obj) && !is_array($obj)) { return $obj; } $arr = array(); foreach($obj as $k