首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Scala中错误地实现Fibonacci序列

在Scala中错误地实现Fibonacci序列
EN

Stack Overflow用户
提问于 2014-06-26 20:59:20
回答 1查看 628关注 0票数 2

在一次斯卡拉会议上,我们在讨论“斯卡拉方式”.

有人问另一个开发人员如何在Scala中实现Fibonacci序列.该人回答如下代码(只被告知,虽然它工作,但它不是最优的):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def fibonacci(n: Int):BigInt = n match {
    case 0 => 0
    case 1 => 1
    case _ => fibonacci(n - 1) + fibonacci(n - 2)
}
  1. 这个方法有什么问题?
  2. 改进这段代码的方法是什么,Scala方法?
EN

回答 1

Stack Overflow用户

发布于 2014-06-26 21:10:00

这一个将计算许多子问题不止一次。你可以把算法想象成一棵树。

例如,如果您请求fibonacci(4),则计算:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fib(4) = fib(3) + fib(2) = 2 + 1 = 3
  // left subtree:
  fib(3) = fib(2) + fib(1) = 1+1 = 2
    // left
    fib(2) = fib(1) + fib(0) = 0+1 = 1
    // right
    fib(1) = 1
  // right
  fib(2) = fib(1) + fib(0) = 0+1 = 1

正如你所看到的,你计算fib(2) 2次,这只会在更高的数字上变得更糟。

至于如何改进此代码:

  • 要么回忆录价值
  • 使用动态编程的技巧(嗯,或多或少也是回忆录)
  • 或者使用更好的算法!

这里已经有很多关于这个主题的问题了--从这里开始:Fibonacci级数的有效计算

或者看一下scala特有的答案:在Scala中编写Fibonacci函数的最快方法是什么?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24444250

复制
相关文章
[javaSE] java获取文件列表
递归测试 import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class FilesDemo { private static final String FILE_PATH = "./"; private static List<Map<String, String>> FileList;
唯一Chat
2019/09/10
2.1K0
「R」获取R包中的函数和对象列表
问题 你想知道包里有什么。 方案 在一个新的 R 会话中使用 search() 可以查看默认加载的包。 search() #> [1] ".GlobalEnv" "package:ellipse" #> [3] "package:Cairo" "package:grid" #> [5] "package:dplyr" "package:scales" #> [7] "package:Rmisc" "package:plyr" #>
王诗翔呀
2020/07/03
7.3K0
java获取kafka主题列表 原
首先引入依赖 <!-- kafka --> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>0.10.2.1</version> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.11</artifactI
尚浩宇
2018/08/17
2.6K0
获取当前jar包路径_java获取jar文件
获取classpath的路径,若没有其他依赖,在cmd下运行该可执行jar包,则该值即为该jar包的绝对路径。代码如下:
全栈程序员站长
2022/11/10
7.5K0
Maven 引用项目中的jar包
这样就省去了将jar包安装到本地maven仓库的麻烦~只要保证需要用的jar包在lib下面就可以了。
前Thoughtworks-杨焱
2021/12/08
8480
Go系列:Go项目中包的管理
以前的go 项目需要放在GOPATH中src中编译执行,在golang1.11之后引入了go modules特性。在go1.11之后的版本可以使用go modules管理go项目中包的依赖,也使项目脱离了GOPATH,可以放置在任意目录。
三猫
2020/11/19
1.1K0
maven: 打包可运行的jar包(java application)及依赖项处理
IDE环境中,可以直接用exec-maven-plugin插件来运行java application,类似下面这样: 1 <plugin> 2 <groupId>org.codehaus.mojo</groupId> 3 <artifactId>exec-maven-plugin</artifactId> 4 <version>1.2.1</version> 5 <executions> 6 <execution> 7 <
菩提树下的杨过
2018/01/19
2.1K0
idea单元测试(导入Junit4的Java包到项目中)
小尘要自信
2023/10/10
1.2K0
idea单元测试(导入Junit4的Java包到项目中)
java-解决jar包反射获取不到类
在开发一个基础工具包给业务组的小伙伴们使用的时候,发现一个小问题,就是在反射的时候在自己电脑上运行的正常,但是打成jar包后,就class not fuond,有点奇怪。 如果能借助Spring这个都不是事,关键是不能用。
潇洒
2023/10/20
7230
SpringBoot获取配置项原内容
那么使用该工具类getProperty("my.url")获取到的就是 https://${my.name}.com 原文, 而不是 https://test.com
code-x
2023/02/23
9610
IDEA项目中把包分层显示的方式
首先打开项目旁边的的设置按钮 然后把如下的选中去掉即可 这样包分层就很明显了。
兮动人
2021/06/11
1.1K0
IDEA项目中把包分层显示的方式
原 获取Android获取传感器列表
Android 4.4 (API等级19)支持以下传感器: TYPE_ACCELEROMETER 加速度传感器,单位是m/s2,测量应用于设备X、Y、Z轴上的加速度 传感器类型值(Sensor Type):1 (0x00000001) TYPE_AMBIENT_TEMPERATURE 温度传感器,单位是℃ 传感器类型值(Sensor Type): 13 (0x0000000d) TYPE_GAME_ROTATION_VECTOR 游戏动作传感器,不收电磁干扰影响 传感
霡霂
2018/06/04
2.5K0
解决python3项目中无法使用supervisor的问题
在我的Dockerfile中这样安装 # 安装项目所需的第三方 RUN python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt \ && python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple \ gunicorn \ && python3 -m pip install git+https
简单、
2018/07/17
1.2K0
java 获取_java中的html如何获取
UUID,通用唯一识别码,是由一组32位数的16进制数字所构成,可以产生一个号称全球唯一的ID,可以用来命名文件、变量以及数据库的ID主键等属于唯一的元素。
全栈程序员站长
2022/09/22
7.4K0
java 获取_java中的html如何获取
获取请求包中的数据
Enumeration e = request.getHeaderNames(); while(e.hasMoreElements()){ String name = e.nextElement().toString(); System.out.println("headName"+request.getHeader(name)); } System.out.println("请求方式:"+request.getMethod()); System.ou
用户6493868
2022/03/06
1.9K0
Python判断列表中是否有某个项
这个算法比较巧妙:遍历列表,把列表中的每一项与匹配项进行比较,如果不相等就把下标为i的列表的值赋值给下标为k的列表,因为初始时k=i=0,意思就是取出当前项再赋值给当前项,假设有列表[1,2,3],匹配项val是2,则循环第一次后1的位置不变,当i=1,k=1时,也就是列表元素为2时,lt[i]!=val为false,进入下一次循环,此时k=1,i=2,lt[2]!=val (备注:lt[2]=2)满足条件,则执行lt[k]=lt[i],3会覆盖2的位置,列表就变成了[1,3,3],循环完毕,返回k值,再使用字符串截取lt[:k],截取从0位置开始,截取长度为k的闭区间长度的字符串,所以为1,3
程序员小新
2021/12/29
2.3K0
【规范】统一项目中包管理器的使用
Dear,大家好,我是“前端小鑫同学”,😇长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~ 【规范】统一项目中包管理器的使用 背景介绍: 我们这里暂不说各种包管理器的优缺点,在实际开发中遇到的一个问题就是,你本地经常使用cnpm来安装,但Jenkins自动构建用的npm,偶尔就会出现本地开发很正常但是Jenkins构建失败报警了,为了避免类似问题的出现,也应该要将能统一的都统一规范。 实现原理: 通过preinstall来在执行install前执行指定脚本; 在preinstall脚
前端小鑫同学
2022/12/26
1.4K0
【规范】统一项目中包管理器的使用
Java的包
指的是一个程序的目录,在最早的时候,如果要开发一个程序,只需要定义一个Java文件,而后在这个文件中编写所需要的类文件。
Mirror王宇阳
2020/11/12
1.1K0
vue2项目中如何使用es2020
ECMAScript 基于多种原始技术,最著名的是 JavaScript (Netscape) 和 JScript (Microsoft)。截止2022年,正式标准一共发布12次,es2020草案撰写中。
奋飛
2021/12/30
1K0
点击加载更多

相似问题

组件中存在具有匹配键的绑定: dagger 2.12

12

Dagger 2.11 -组件中存在具有匹配键的绑定

10

Dagger 2组件中存在具有匹配键的绑定

126

匕首:组件中存在具有匹配键的绑定。

10

Dagger2 -多模块-组件中存在具有匹配密钥的绑定

17
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文