Thinking in scala (8)---- 乘幂计算
递归的方式:
b^n = (b^(n/2))^2 若n是偶数
b^n = b*(b^(n-1)) 若n是奇数
迭代的方式
product:存储中间结果,初始化为1
b^n = (b^2)^(n/2) * product 若n是偶数
b^n = b^(n-1) * product*b 若n是奇数
递归方式比较简单,这里不再贴上实现的代码,下面是用迭代方式计算乘幂的Scala代码:
object expt{ def f(b:Int,n:Int,product:Int):Int={ if(n==1) b*product else if(isOdd(n)) f(b,n-1,b*product) else f(b*b,n/2,product) } def isOdd(n:Int)={ n%2 == 1 } def expt(b:Int,n:Int)=f(b,n,1) def main(args:Array[String])= { println(expt(2,10)) println(expt(2,11)) println(expt(5,9)) } }
无论是递归算法还是迭代算法,时间复杂度都是O(lg(n)),递归算法的空间复杂度是O(lg(n)),迭代算法的空间复杂度是O(1)
Thinking in scala (8)---- 乘幂计算的更多相关文章
- Scala入门指南与建议
最近在学习使用Scala语言做项目,感觉这门语言实在是太优美了!作为一个本科数学.研究生机器学习专业的混合人才(哈哈),这门语言真的是满足了普通计算机编程(告诉计算机怎么做)和函数式编程(告诉计算机做 ...
- Scala类型声明与定义、函数定义、流程控制、异常处理
Scala源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库. Scala的基础类型基本与javascript一致. Scala的数据类型全部相同于Java中,具有 ...
- 大数据系列修炼-Scala课程10
今天主要是关于Scala中对List的相关操作,list在Scala中应该是至关重要,接下来会讲解关于List的一系列操作 List的map.flatMap.foreach.filter操作讲解 1. ...
- 大数据计算框架Hadoop, Spark和MPI
转自:https://www.cnblogs.com/reed/p/7730338.html 今天做题,其中一道是 请简要描述一下Hadoop, Spark, MPI三种计算框架的特点以及分别适用于什 ...
- [原创]Scala学习:关于变量(val,var,类型推断)
1.常量定义: val val 类似于java中的final变量.一旦初始化了,val就不能再被赋值 val megs = "hello world" 2.变量的定义: var ...
- (一)Spark简介-Java&Python版Spark
Spark简介 视频教程: 1.优酷 2.YouTube 简介: Spark是加州大学伯克利分校AMP实验室,开发的通用内存并行计算框架.Spark在2013年6月进入Apache成为孵化项目,8个月 ...
- Spark 入门
Spark 入门 目录 一. 1. 2. 3. 二. 三. 1. 2. 3. (1) (2) (3) 4. 5. 四. 1. 2. 3. 4. 5. 五. Spark Shell使用 ...
- Spark入门实战系列--1.Spark及其生态圈简介
[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .简介 1.1 Spark简介 年6月进入Apache成为孵化项目,8个月后成为Apache ...
- Spark RDD概念学习系列之RDD的创建(六)
RDD的创建 两种方式来创建RDD: 1)由一个已经存在的Scala集合创建 2)由外部存储系统的数据集创建,包括本地文件系统,还有所有Hadoop支持的数据集,比如HDFS.Cassandra.H ...
随机推荐
- Android中Canvas绘图基础详解(附源码下载) (转)
Android中Canvas绘图基础详解(附源码下载) 原文链接 http://blog.csdn.net/iispring/article/details/49770651 AndroidCa ...
- postgresql 在linux上的源码安装
http://my.oschina.net/hippora/blog/375292 下载源码并解压 [root@fnddb ~]# wget https://ftp.postgresql.org/pu ...
- python 中调用shell命令
subprocess模块 根据Python官方文档说明,subprocess模块用于取代上面这些模块.有一个用Python实现的并行ssh工具—mssh,代码很简短,不过很有意思,它在线程中调用sub ...
- FZU 2086 餐厅点餐(枚举)
///个人感觉vector好看一点 #include<iostream> #include<cstdio> #include<cstring> #include&l ...
- 学习笔记——桥接模式Bridge
桥接模式的目的是在设计初,就将实现与接口分离,在以后实现发生变化时,只需要改变传递的实现对象,在保持接口一致的情况,达到实现的变更. 在OperationInterface中就调用实现的方法imp.O ...
- JavaScript(四)---- 函数
函数主要用来封装具体的功能代码. 函数是由这样的方式进行声明的:关键字 function.函数名.一组参数,以及置于括号中的待执行代码. 格式: function 函数名(形参列表){ ...
- php五大运行模式CGI,FAST-CGI,CLI,ISAPI,APACHE模式浅谈
做 php 开发的应该都知道 php 运行模式概念吧,本文将要和大家分享的是关于php目前比较常见的五大运行模式:包括cgi .fast-cgi.cli.isapi.apache模块的DLL ,下面作 ...
- zf-关于表单不能提交的bug修改
因为使用onclick="submitForm();" 函数提交的 就表示 这里面有js代码 js代码 里面使用document.from1.submit()提交的 所以from ...
- hide the navigationBar and tabBar
[self.navigationController setNavigationBarHidden:YES animated:NO]; hidesBottomBarWhenPushed
- CentOS 6.5 安装Suricata(with PF_RING & CUDA)
0.基础包 确保已安装 yum install mpfr cpp ppl cloog-ppl gcc kernel-devel pcre-devel libpcap-devel yum-plugin- ...