Scala第十五章节(递归的相关概述、Scala阶乘案例、Scala斐波那契数列案例、Scala打印目录文件案例)

news2024/11/23 22:11:57

章节目标

  1. 了解递归的相关概述
  2. 掌握阶乘案例
  3. 掌握斐波那契数列案例
  4. 掌握打印目录文件案例

1. 递归

递归指的就是 方法自己调用自己的情况 . 在涉及到复杂操作时, 我们会经常用到它. 在使用递归时, 要注意以下三点:

  1. 递归必须有出口, 否则容易造成 死递归 .
  2. 递归必须要有规律.
  3. 构造方法不能递归.
  4. 递归方法必有 返回值的数据类型 .

例如: 下述的代码就是递归的写法

def show() = { 

show() 

}

2. 案例一:求阶乘

2.1 概述

所谓的阶乘其实指的是 数字1到该数字的累乘结果 , 例如5的阶乘就相当于 5 * 4 * 3 * 2 * 1 , 4的阶乘就相当于 4 * 3 * 2 * 1 , 根据上述的描述, 我们可以得出两个结论:

  1. 阶乘公式为(例如: 求数字n的阶乘): n! = n * (n - 1)!
  2. 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中, 内存被分为五部分, 分别为 栈, 堆, 方法区, 本地方法区, 寄存器 , 特点如下:

1.栈 :

**功能: **

  • 所有代码的执行.
  • 存储局部变量.

**特点: **按照 先进后出 的顺序执行, 方法执行完毕后立马被回收.

2.堆 :

  • 功能: 存储所有new出来的内容(即: 对象).
  • 特点: 在不确定的时间被 GC 回收.

3.方法区:

  • 功能: 存储字节码文件, 方法等数据.
  • 特点: 程序执行完毕后, 由操作系统来回收资源.

4.本地方法区:

本地方法 相关, 了解即可.

5.寄存器

CPU 相关, 了解即可.

阶乘图解

在这里插入图片描述

3. 案例二:斐波那契数列

3.1 概述

传说在罗马时期有个意大利青年叫 斐波那契 , 有一天他提出了一个非常有意思的问题, 假设:

  1. 一对小兔子一个月之后会成长为一对大兔子.
  2. 每一对大兔子每个月都会生一对小兔子.
  3. 假设所有兔子都不死亡的情况下, 问: 1对小兔子, 1年之后会变为多少对兔子?

3.2 思路分析

月份兔子总对数兔子详情
111对小兔子
211对大兔子
321对大兔子, 1对小兔子
432对大兔子, 1对小兔子
553对大兔子, 2对小兔子
12

即: 已知数列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 需求

  1. 定义printFile(dir:File)方法, 该方法接收一个文件目录, 用来打印该目录下所有的文件路径.
  2. 在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"))
}
}

n(listFile)
else printFile(listFile)
}
}
}
//2.main方法, 作为程序的主入口.
def main(args: Array[String]): Unit = {
//3. 调用方法show()
printFile(new File(“d:\abc”))
}
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1562139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网址打包微信小程序源码 wap转微信小程序 网站转小程序源码 网址转小程序开发

内容目录 一、详细介绍二、效果展示2.效果图展示 三、学习资料下载 一、详细介绍 我们都知道微信小程序是无法直接打开网址的。 这个小程序源码提供了一种将网址直接打包成微信小程序的方法&#xff0c; 使得用户可以在微信小程序中直接访问这些网址内容。 这个源码没有进行加…

如何评估基于指令微调的视觉语言模型的各项能力-MMBench论文解读

1. 传统基准的固有局限 VQAv2:视觉问题回答数据集,主要用于评估视觉理解与推理能力。COCO Caption:图像描述生成数据集,用于评估模型对图像内容的理解与描述能力。GQA:结合常识的视觉问题回答数据集。OK-VQA:需要外部知识的视觉问题回答数据集。TextVQA:图像中包含文本的…

RAG论文 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks

RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09;由Facebook在2020年发表的论文 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks 语言模型存在幻觉 由于知识缺乏&#xff0c;没有实时增量信息没有具体领域的拓展信息…

【MATLAB第103期】#源码分享 | 基于MATLAB的LIME可解释性线性分类预测模型,2020b以上版本

【MATLAB第103期】#源码分享 | 基于MATLAB的LIME可解释性线性分类预测模型&#xff0c;2020b以上版本 一、模型介绍 LIME&#xff08;Local Interpretable Model-agnostic Explanations&#xff09;是一种用于解释复杂机器学习模型预测结果的算法。它由Marco Ribeiro、Sameer…

如何使用极狐GitLab Maven 仓库?

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何使用极狐GitLa…

xss-lab 1-10关过关记录

前言 最近发现xss学的知识点都忘干净了&#xff0c;来打一打靶子并且记录一下这些过关经历。 level1 特性&#xff1a; 1.get型传参 2.无任何过滤 过关操作&#xff1a; 直接构造payload传参过关 level2 get型传参 我们在输入框中输入payload发现并没有弹窗。 查看网页…

Python接口自动化测试-篇1(postman+requests+pytest+allure)

Python接口自动化测试是一种使用Python编程语言来编写脚本以自动执行针对应用程序接口&#xff08;APIs&#xff09;的测试过程。这种测试方法专注于检查系统的不同组件或服务之间的交互&#xff0c;确保它们按照预期规范进行通信&#xff0c;而不涉及用户界面&#xff08;UI&a…

2024年04月IDE流行度最新排名

点击查看最新IDE流行度最新排名&#xff08;每月更新&#xff09; 2024年04月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多&#xff0c;这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…

书生·浦语训练营二期第二次笔记

1. 部署 InternLM2-Chat-1.8B 模型进行智能对话 1.1 配置环境 创建conda环境&#xff0c;安装必要的库 studio-conda -o internlm-base -t demo # 与 studio-conda 等效的配置方案 # conda create -n demo python3.10 -y # conda activate demo # conda install pytorch2.0.…

自定义 Unity Scene 的界面工具

介绍 文档中会进行SceneView的自定义扩展&#xff0c;实现显示常驻GUI和添加自定义叠加层&#xff08;Custom Overlay&#xff09;。 最近项目开发用回了原生的Unity UI相关内容。对于之前常用的FairyGUI来说&#xff0c;原生的UGUI对于UI同学来讲有些不太方便。再加上这次会…

圈子小程序源码-圈子系统成品搭建-APP小程序H5三端源码交付,支持二开!PHP书写,uniAPP后端开发!

【首页】 圈子列表页可分为个人圈子、企业圈子、加入圈子、智诚工业圈子 (平台圈) 四种。 其中重要圈子可选择置顶&#xff0c;方便快速进入:个人圈子和企业圈子数量有限始终位于前位。也可通过搜索快速搜索圈子。 为了实现流量分散入口的集中&#xff0c;将创建企业圈子、发…

服务器设置了端口映射之后外网还是访问不了服务器

目录 排查思路参考&#xff1a; 1、确认服务是否在运行 2、确认端口映射设置是否正确 3、使用防火墙测试到服务器的连通性 4、检查服务内部的配置 5、解决办法 6、学习小分享 我们在一个完整的网络数据存储服务系统设备中都会存有业务服务器、防火墙、交换机、路由器&a…

缓存(反向代理)服务器-varnish

varnish简介&#xff1a; varnish是一款高性能且开源的反向代理服务器和HTTP加速器&#xff0c;&#xff08;其实就是带缓存的反向代理服务器&#xff09;它可以把整个HTTP响应内容缓存到内存或文件中&#xff0c;从而提高web服务器器的响应速度。 与传统的squid相比&#xff0…

electron 打不同环境的包

我用的打包工具: electron-builder 1、在package.json 文件的同级下创建2个js文件 electron-builder-test.config.js electron-builder.config.js electron-builder-test.config.js const basejson require(./electron-builder.config.js); module.exports {extraMetada…

【opencv】教程代码 —features2D(6)透视矫正:读取两个棋盘格图片并进行图像对齐...

perspective_correction.cpp 透视校正 hconcat(img2, img1_warp, img_draw_warp); hconcat(img1, img2, img_draw_matches); #include <iostream> // 引入iostream库&#xff0c;用于进行标准输入和输出操作 #include <opencv2/core.hpp> // 引入opencv的core库&am…

session学习

3次请求均有sessionID session的作用 跟踪用户的行为&#xff0c;方便日后推荐客户端和服务器交互相对安全些session是代表会话&#xff0c;也可理解为客户端和服务端的交互sessionID是服务器生成的唯一字符串&#xff0c;用来跟踪用户行为cookie是浏览器自带的&#xff0c;专…

4.1作业

对菱形继承给出的代码中每一个类&#xff0c;写一个有参构造函数写出下列类的&#xff0c;构造函数(有参、无参)&#xff0c;析构函数&#xff0c;拷贝构造函数和拷贝赋值函数 class Father { int *p; const string name; } class Son:public Father { int *age; 3整理思维导图…

【JavaWeb】Day30.SpringBootWeb请求响应——响应

响应 HTTL协议的交互方式&#xff1a;请求响应模式&#xff08;有请求就有响应&#xff09;那么Controller程序&#xff0c;除了接收请求外&#xff0c;还可以进行响应。 1.ResponseBody 在我们前面所编写的controller方法中&#xff0c;都已经设置了响应数据。 controller方…

前端订阅推送WebSocket定时任务

0.需求 后端定时向前端看板推送数据&#xff0c;每10秒或者30秒推送一次。 1.前言知识 HTTP协议是一个应用层协议&#xff0c;它的特点是无状态、无连接和单向的。在HTTP协议中&#xff0c;客户端发起请求&#xff0c;服务器则对请求进行响应。这种请求-响应的模式意味着服务器…

路径规划——搜索算法详解(六):LPA*算法详解与Matlab代码

上文讲解了D*算法&#xff0c;D*算法为在动态环境下进行路径规划的场景提出了可行的解决方案&#xff0c;本文将继续介绍另外一种动态规划路径的方法——Lifelong Planning A*&#xff08;LPA*&#xff09;算法。 该算法可以看作是A*的增量版本&#xff0c;是一种在固定起始点…