Day01—基础复习,递归

1、递归

  • 定义:指在当前方法内调用自己,即函数内部调用本函数

  • 分类:

    • 直接递归和间接递归
    • 直接递归成为方法自身调用自己
    • 间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法
  • 注意事项
    • 递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出
    • 在递归中虽然有条件限定,但递归次数不能太多,否则也会发生栈内存溢出。
    • 构造方法,禁止递归。
  • 递归使用的前提

    • 当调用方法的时候,方法的主体不变,每次调用方法的参数不同,可以使用递归

  • 递归练习

  • 1、计算1到n的和

    1. package com.one;
    2. public class Sum_n {
    3. public static void main(String[] args) {
    4. // 使用递归计算1到100的和
    5. int s= sum(100);
    6. System.out.println(s);
    7. }
    8. /*
    9. * 思路分析:
    10. * 计算1-N的和
    11. * 可以做 n+(n-1)+(n-2)+...+1
    12. * 注:使用递归必须明确:
    13. * 1、递归的结束条件
    14. * 本题获取到1结束
    15. * 2、递归的目的
    16. * 获取下一个被加的数字
    17. * */
    18. public static int sum(int n){
    19. //获取到1结果
    20. if(n==1){
    21. return 1;
    22. }
    23. //获取下一个被加的数字(n-1)
    24. return n+sum(n-1);
    25. }
    26. }
  • 使用递归求阶乘

  1. package com.one;
  2. public class Jiecheng {
  3. public static void main(String[] args) {
  4. //递归n*(n-1)*(n-2)*..*1
  5. int jiecheng=jc(5);
  6. System.out.print(jiecheng);
  7. }
  8. //方法的主体不变,参数发生变化
  9. public static int jc(int n){
  10. //获取到1结果
  11. if(n==1){
  12. return 1;
  13. }
  14. //获取下一个被加的数字(n-1)
  15. return n*jc(n-1);
  16. }
  17. }
  • 使用递归遍历文件目录
  1. package com.one;
  2. import java.io.File;
  3. public class Dfile {
  4. /*要求打印多级目录*/
  5. public static void main(String[] args){
  6. File file=new File("E:\\note");
  7. getAllFile(file);
  8. }
  9. public static void getAllFile(File dir){
  10. System.out.println(dir);
  11. File[] files=dir.listFiles();
  12. for (File f:files){
  13. if(f.isDirectory()){
  14. //判断是否是文件夹,如果是文件夹,则执行本身继续递归遍历
  15. getAllFile(f);
  16. }else{
  17. //不是文件夹,则直接打印
  18. System.out.println(f);
  19. }
  20. }
  21. }
  22. }
  23. /*Console结果
  24. * E:\note
  25. E:\note\Ajax.md
  26. E:\note\api1.md
  27. E:\note\API2.md
  28. * */

  • 搜索限定文件类型
  1. package com.one;
  2. import java.io.File;
  3. public class Dfile {
  4. /*1、要求打印多级目录
  5. * 2、要求只打印.md文件*/
  6. public static void main(String[] args){
  7. File file=new File("E:\\note");
  8. getAllFile(file);
  9. }
  10. public static void getAllFile(File dir){
  11. File[] files=dir.listFiles();
  12. for (File f:files){
  13. if(f.isDirectory()){
  14. //判断是否是文件夹,如果是文件夹,则执行本身继续递归遍历
  15. getAllFile(f);
  16. }else{
  17. //不是文件夹,则直接打印
  18. //使用File对象的toSting方法,在使用字符串的endWith("字符串")判断结尾字符,返回布尔值的方法;
  19. String s= f.toString();
  20. //把字符串全部转换为小写的
  21. s=s.toLowerCase();
  22. boolean bool=s.endsWith(".md");
  23. if(bool){
  24. System.out.println(f);
  25. }
  26. //简洁写法
  27. //链式编程
  28. if(f.getName().toString().endsWith(".md")){
  29. System.out.println(f);
  30. }
  31. }
  32. }
  33. }
  34. }
  35. /*Console结果
  36. E:\note\Ajax.md
  37. E:\note\api1.md
  38. E:\note\API2.md
  39. * */

2、基础知识复习

2.1 命令
  1. //查看版本
  2. javac -version
  3. java -version
  4. // 编译与执行
  5. javac Xxxx.java
  6. 生成Xxxx.class
  7. 执行命令
  8. java Xxxx
2.2常量

定义:在程序运行中,空间不能发生改变,变量不能被第二次赋值的空间叫做常量;只有一次赋值机会。

规范:所有字母大写

关键字:final

  1. package com.two;
  2. public class demo1 {
  3. public static void main(String[] args) {
  4. //声名常量
  5. final double PI =3.1415926;
  6. System.out.print(PI);
  7. }
  8. }
2.3数据类型
  • 参考连接:https://www.runoob.com/java/java-basic-datatypes.html

此处不在一一复习只做简单介绍:

计算机存储单位

1位=8字节

1bit=8byte

分类:

  1. 整型 intlong类型
  2. 浮点型 double float(注:float声名的数字需要在数字后添加f)
  3. 布尔型 boolean bool;
  4. 字符型 char a='k';占两个字节;只能使用单引号声名;
  5. short 默认值 0

2.4数据类型转换
  1. 布尔型(boolean)不参与类型转换
  • 自动

    可以自然而然发生,不需要人为干预。一般发生在从小转向大。将小数据赋值给大类型的变量。从小类型转成大类型。数据是不会发生丢失

    赋值:小的数据 给到大的类型的变量; 小的类型的数据给到大的类型的变量

    运算:运算过程中,选取大类型(将所有运算数的类型自动转为同一种类型,然后运算)

    1. 必须满足转换前的数据类型的位数要低于转换后的数据类型,例如: short数据类型的位数为16位,就可以自动转换位数为32int类型,同样float数据类型的位数为32,可以自动转换为64位的double类型。
    1. package com.two;
    2. public class demo1 {
    3. public static void main(String[] args) {
    4. char c1='a';//定义一个char类型
    5. int i1 = c1;//char自动类型转换为int
    6. System.out.println("char自动类型转换为int后的值等于"+i1);
    7. char c2 = 'A';//定义一个char类型
    8. int i2 = c2+1;//char 类型和 int 类型计算
    9. System.out.println("char类型和int计算后的值等于"+i2);
    10. }
    11. }
    12. /*c1 的值为字符 a ,查 ASCII 码表可知对应的 int 类型值为 97, A 对应值为 65,所以 i2=65+1=66。*/
  • 强制类型转换

    • 条件是转换的数据类型必须是兼容的。
    • 格式:(type)value type是要强制类型转换后的数据类型 实例:
    1. package com.two;
    2. public class Demo2 {
    3. public static void main(String[] args) {
    4. // 强制类型转换
    5. int i1 = 123;
    6. byte b = (byte)i1;//强制类型转换为byte
    7. System.out.println("int强制类型转换为byte后的值等于"+b);
    8. double d= (double)i1;
    9. System.out.println("int强制类型转换为double后的值等于"+d);
    10. }
    11. }
    12. /*int强制类型转换为byte后的值等于123*/
  • 隐含强制类型转换

    • 整数的默认类型是 int。
    • 小数默认是 double 类型浮点型,在定义 float 类型时必须在数字后面跟上 F 或者 f。

不辜负自己,加油;

Java递归与基础复习的更多相关文章

  1. Java基础复习笔记基本排序算法

    Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...

  2. Java基础复习笔记系列 九 网络编程

    Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...

  3. Java基础复习笔记系列 八 多线程编程

    Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...

  4. Java基础复习笔记系列 七 IO操作

    Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...

  5. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  6. Java基础复习笔记系列 四 数组

    Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...

  7. 2018.6.13 Java语言基础复习总结

    Java语言基础与面向对象编程实践 第一章 初识Java 1.1机器语言 机器语言是指一台计算机全部的指令集合.机器语言室友0和1组成的二进制数,是一串串由0和1组成的指令序列,可将这些指令序列交给计 ...

  8. 《Java基础复习》-控制执行流程

    最近任务太多了,肝哭我了,boom 参考书目:Thinking in Java <Java基础复习>-控制执行流程 Java使用了C的所有流程控制语句 涉及关键字:if-else.whil ...

  9. 《Java基础复习》—常识与入门

    突然发现自己Java基础的底子不到位,复习! 所记知识会发布在CSDN与博客网站jirath.cn <Java基础复习>-常识与入门 一.Java语言的知识体系图 分为三部分 编程语言核心 ...

随机推荐

  1. 解决matplotlib中文不显示问题

    在导入库时添加如下几行代码 from pylab import mpl mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体 mpl.rcPa ...

  2. [学习笔记]Linux环境下部署 .Net5 程序

    ​公司的项目需要部署到一台公网的linux服务器,以便同事们测试小程序. 目标服务器是新搭建的CentOS 8虚拟机,以非docker的方式部署.现记录过程便于日后部署至项目甲方的服务器上,因为甲方的 ...

  3. 密码学之PRP/PRF转换引理

    本文将介绍密码学中的PRF.PRP等相关概念,并介绍 PRP/PRF 转换引理及其证明,希望读完本文后,你能对现代密码学中这几个基础概念有所了解. 在开始本文前,希望你有如下预备知识: 现代密码学是怎 ...

  4. AFN框架

    0.AFN框架基本使用 0.1 AFN内部结构 AFN结构体 - NSURLConnection + AFURLConnectionOperation(已经被废弃) + AFHTTPRequestOp ...

  5. 清除git中缓存的凭证(用户名及密码)

    今天刚接触Git,还有Gitstack,然后在克隆Gitstack服务器上的仓库时出现了一直用户身份识别失败问题,找了一些大佬的文章才知道原因在于密码输入错误过多.那么如何重新输入呢? 需要清空本地的 ...

  6. Jackson转换为Collection、Array

    1. Jackson转化为Array 注意的地方就是实体类一定要有无参的构造方法,否则会报异常 //com.fasterxml.jackson.databind.exc.InvalidDefiniti ...

  7. DatabaseMetaData

    getColumns public ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern ...

  8. Docker私有仓库与Harbor部署使用

    Docker私有仓库与Harbor部署使用 目录 Docker私有仓库与Harbor部署使用 一.本地私有仓库 1. 下载registry镜像 2. 在daemon.json文件中添加私有镜像仓库地址 ...

  9. Docker创建私有镜像仓库

    Docker官方提供了一个工具docker-registry,可以借助这个工具构建私有镜像仓库: 1.拉取registry镜像 # docker pull registry//可以使用 docker ...

  10. 简述redis特点及其应用场景

    1. Redis八大特点 1.1. 速度快 说到Redis的速度快,大家的第一反应一定是内存读取,那是肯定的,但如果面试的时候仅仅说到这点,那还是远远不够的,至少还有以下三点要补充: Redis是用C ...