当前位置:网站首页>Scala基础教程--15--递归
Scala基础教程--15--递归
2022-07-04 16:54:00 【落空空。】
Scala基础教程–15–递归
章节目标
- 了解递归的相关概述
- 掌握阶乘案例
- 掌握斐波那契数列案例
- 掌握打印目录文件案例
1. 递归
递归指的就是 方法自己调用自己的情况
. 在涉及到复杂操作时, 我们会经常用到它. 在使用递归时, 要注意以下三点:
- 递归必须有出口, 否则容易造成 死递归 .
- 递归必须要有规律.
- 构造方法不能递归.
- 递归方法必有 返回值的数据类型 .
例如: 下述的代码就是递归的写法.
def show() = {
show()
}
2. 案例一: 求阶乘
2.1 概述
所谓的阶乘其实指的是 数字 1到该数字的累乘结果
, 例如5的阶乘就相当于 5 * 4 * 3 * 2 * 1
, 4的阶乘就相当于4 * 3 * 2 * 1
, 根据上述的描述, 我们可以得出两个结论:
- 阶乘公式为(例如: 求数字n的阶乘): n! = n * (n - 1)!
- 1的阶乘等于1, 即: 1! = 1
2.2 需求
计算5的阶乘.
2.3 参考代码
// 案例: 求5的阶乘.
object ClassDemo01 {
//1. 定义方法, 用来求数字n的阶乘.
def factorial(n:Int):Int = if(n == 1) 1 else n * factorial(n - 1)
def main(args: Array[String]): Unit = {
//2. 调用factorial方法, 用来获取5的阶乘.
val num = factorial(5)
//3. 打印结果.
println(num)
}
}
2.4 内存图解
概述
在Scala中, 内存被分为五部分, 分别为 栈 , 堆, 方法区, 本地方法区, 寄存器 , 特点如下:
- 栈
功能 :
所有代码的执行 .
存储局部变量 .
特点 : 按照 先进后出 的顺序执行, 方法执行完毕后立马被回收. - 堆 :
功能 : 存储所有new出来的内容(即: 对象).
特点 : 在不确定的时间被 GC 回收. - 方法区 :
功能 : 存储字节码文件, 方法等数据.
特点 : 程序执行完毕后, 由操作系统来回收资源. - 本地方法区 :
和 本地方法 相关, 了解即可. - 寄存器
和 CPU 相关, 了解即可.
阶乘图解
3. 案例二: 斐波那契数列
3.1 概述
传说在罗马时期有个意大利青年叫 斐波那契
, 有一天他提出了一个非常有意思的问题, 假设:
- 一对小兔子一个月之后会成长为一对大兔子.
- 每一对大兔子每个月都会生一对小兔子.
- 假设所有兔子都不死亡的情况下, 问: 1对小兔子, 1年之后会变为多少对兔子?
3.2 思路分析
即 : 已知数列1, 1, 2, 3, 5, 8, 13…, 问: 第12个数字是多少?
3.3 参考代码
// 案例: 斐波那契数列
object ClassDemo02 {
//1. 定义方法, 用来获取兔子的对数.
def rabbit(month:Int):Int = {
if(month == 1 || month == 2) 1
else rabbit(month -1) + rabbit(month - 2)
}
def main(args: Array[String]): Unit = {
//2. 调用方法, 获取第12个月的兔子对数.
val num = rabbit(12)
//3. 打印结果.
println(num)
}
}
4. 案例三: 打印目录文件
4.1 需求
- 定义printFile(dir:File)方法, 该方法接收一个文件目录, 用来打印该目录下所有的文件路径.
- 在main方法中测试printFile()方法.
4.2 目的
考察 递归 , Java的File类 相关内容.
注意: 因为Scala是依赖JVM的, 所以Java中的类库, Scala也可以无缝调用,
4.3 参考代码
import java.io.File
//案例: 获取指定目录下所有的文件.
object ClassDemo03 {
//1. 定义printFile()方法, 用来打印指定目录下所有的文件信息.
def printFile(dir: File): Unit = {
if (!dir.exists()) {
println("您录入的路径不存在")
} else {
val listFiles:Array[File] = dir.listFiles()
for(listFile <- listFiles) {
if(listFile.isFile) println(listFile)
else printFile(listFile)
}
}
//2.main方法, 作为程序的主入口.
def main(args: Array[String]): Unit = {
//3. 调用方法show()
printFile(new File("d:\\abc"))
}
}
边栏推荐
- Wireshark抓包TLS协议栏显示版本不一致问题
- Li Kou brush question diary /day5/2022.6.27
- Li Kou brush question diary /day6/6.28
- [proteus simulation] printf debugging output example based on VSM serial port
- File processing examples of fopen, FREAD, fwrite, fseek
- Clever use of curl command
- People in the workplace with a miserable expression
- Make a grenade with 3DMAX
- Reptile elementary learning
- Weima, which is going to be listed, still can't give Baidu confidence
猜你喜欢
1、 Introduction to C language
股价大跌、市值缩水,奈雪推出虚拟股票,深陷擦边球争议
How to test MDM products
Halcon template matching
mysql5.7安装教程图文详解
庆贺!科蓝SUNDB与中创软件完成七大产品的兼容性适配
The controversial line of energy replenishment: will fast charging lead to reunification?
The money circle boss, who is richer than Li Ka Shing, has just bought a building in Saudi Arabia
.NET ORM框架HiSql实战-第二章-使用Hisql实现菜单管理(增删改查)
TCP waves twice, have you seen it? What about four handshakes?
随机推荐
Li Kou brush question diary /day4/6.26
Introduction of time related knowledge in kernel
力扣刷题日记/day5/2022.6.27
Li Kou brush question diary /day5/2022.6.27
2022 national CMMI certification subsidy policy | Changxu consulting
Russia arena data releases PostgreSQL based products
Analysis of I2C adapter driver of s5pv210 chip (i2c-s3c2410. C)
Make a grenade with 3DMAX
"In Vietnam, money is like lying on the street"
Grain Mall (I)
【Go语言刷题篇】Go完结篇|函数、结构体、接口、错误入门学习
Digital "new" operation and maintenance of energy industry
VMware Tools和open-vm-tools的安装与使用:解决虚拟机不全屏和无法传输文件的问题
比李嘉诚还有钱的币圈大佬,刚在沙特买了楼
力扣刷题日记/day7/6.30
Heartless sword Chinese translation of Elizabeth Bishop's a skill
2022年全国CMMI认证补贴政策|昌旭咨询
Once the "king of color TV", he sold pork before delisting
Face_ Attendance statistics of recognition face recognition
ISO27001 certification process and 2022 subsidy policy summary