传统方式和递归方式速度 PK | 学习笔记

简介: 快速学习传统方式和递归方式速度 PK

开发者学堂课程【Scala 核心编程 - 进阶传统方式和递归方式速度 PK学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/610/detail/9098


传统方式和递归方式速度 PK


内容介绍:

一、应用案例

二、使用函数式编程方式-递归

三、总结


一、应用实例

scala 中循环不建议使用 while 和 do...while,而建议使用递归。

应用实例要求:

计算1-50的和

常规的解决方式

用 while 循环

val now: Date = new Date()

val dateFormat: SimpleDateFormat =

new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

val date = dateFormat. format(now)

println("date=" + date)//输出时间

var res = Biglnt(O)

var num = Biglnt(1)

var maxVal = Biglnt(99999999I)//BigInt(99999999I)[测试效率大数]

while (num= maxVal){

res += num

num += 1

}

println("res=" + res)

实操1:

//计算1-50的和,使用常规的while来完成

val now : Date = new Date()

val dateFormat: simpleDateFormat =

new simpleDateFormat( "yyyy-MM-dd HH : mm: ss")

val date = dateFormat.format(now)

printLn("执行前的时间date=" + date)//输出时间

var res = Bigint(0)//存放计算的结果

var num = BigInt(1) // num变化的数

var maxval = BigInt(99999999l)//BigInt(99999999L)[测试效率大数]//使用传统的while

while (num <= maxval) {res += num//累计

num += 1//变量的叠加

}

println( "res=" + res)//结果,耗时8秒

继续输出时间

val now2 : Date = new Date()

val date2 = dateFormat.format(now2)

println("执行完毕的时间date2” + date)//输出时间

//递归的方式来统计1+....+num和

def mx(num: BigInt, sum: BigInt):BigInt = {

if(num <= 999999991)return mx (num+1, sum +num)else return sum

}

接收一个 num ,传进一个 sum ,未使用外部变量,保证函数的纯洁性,如果num 小于999999991,递归调用,调用 max ,num + 1,sum 累计一个,一直到 num 不在小于999999991,整个结果返回

实操2:

//执行前的时间,8秒

val now: Date = new Date()

val dateFormat: SimpleDateFormat =

new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

val date = dateFormat. format(now)

println("date=" + date)//输出时间

//测试耗时

var num = Bigint(1)// num

var sum = BigInt(0) //累计和

var res = mx(num, sum) //调用

println( "res是=” + res) //输出结果

//执行后的时间,8秒

val now2 : Date = new Date()

val date2 = dateFormat.format(now2)

println("执行完毕的时间date2” + date)//输出时间

递归小心使用,如果使用不当,会出现问题,递归对速度影响不大


二、使用函数式编程方式-递归

函数式编程的重要思想就是尽量不要产生额外的影响,上面的代码就不符合函数式编程的思想,下面我们观察使用函数式编程方式来解决(Scala提倡的方式)

测试:看看递归的速度是否有影响?

不大

递归使用的陷阱

//递归的方式来解决

def mx(num:Biglnt,sum:Biglnt):Biglnt = {

if(num <= 99999999l) return mx(num+1,sum + num)else return sum

}

//测试

var num = Biglnt(1)var sum= Biglnt(O)

var res = mx(num,sum)println("res=" +res)


三、总结

1.递归的基本介绍,Scala 语言的特色,简洁高效。

2.递归思想书写代码,介绍编程范式及其特点,面向对象。递归出镜几率小,原因递归难理解,使用不好容易出问题。

3.应用实例,求和问题,使用常规和递归的方式解决。常规共耗时8秒钟,递归方式耗时8秒,影响效率不大,但是递归存在使用陷阱。

相关文章
|
3天前
|
数据采集 人工智能 安全
|
12天前
|
云安全 监控 安全
|
4天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1074 151
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1745 9
|
9天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
689 152
|
11天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
656 12
|
6天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
420 4