Day01—基础复习,递归

1、递归

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

  • 分类:

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

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

  • 递归练习

  • 1、计算1到n的和

    package com.one;
    
    public class Sum_n {
    
    	public static void main(String[] args) {
    // 使用递归计算1到100的和
    int s= sum(100);
    System.out.println(s);
    }
    /*
    * 思路分析:
    * 计算1-N的和
    * 可以做 n+(n-1)+(n-2)+...+1
    * 注:使用递归必须明确:
    * 1、递归的结束条件
    * 本题获取到1结束
    * 2、递归的目的
    * 获取下一个被加的数字
    * */
    public static int sum(int n){
    //获取到1结果
    if(n==1){
    return 1;
    }
    //获取下一个被加的数字(n-1)
    return n+sum(n-1);
    }
    }
  • 使用递归求阶乘

package com.one;
public class Jiecheng {
public static void main(String[] args) {
//递归n*(n-1)*(n-2)*..*1
int jiecheng=jc(5);
System.out.print(jiecheng);
}
//方法的主体不变,参数发生变化
public static int jc(int n){
//获取到1结果
if(n==1){
return 1;
}
//获取下一个被加的数字(n-1)
return n*jc(n-1);
}
}
  • 使用递归遍历文件目录
package com.one;

import java.io.File;
public class Dfile {
/*要求打印多级目录*/
public static void main(String[] args){
File file=new File("E:\\note");
getAllFile(file); }
public static void getAllFile(File dir){
System.out.println(dir);
File[] files=dir.listFiles();
for (File f:files){
if(f.isDirectory()){
//判断是否是文件夹,如果是文件夹,则执行本身继续递归遍历
getAllFile(f);
}else{
//不是文件夹,则直接打印
System.out.println(f);
}
}
}
}
/*Console结果
* E:\note
E:\note\Ajax.md
E:\note\api1.md
E:\note\API2.md
* */

  • 搜索限定文件类型
package com.one;

import java.io.File;
public class Dfile {
/*1、要求打印多级目录
* 2、要求只打印.md文件*/
public static void main(String[] args){
File file=new File("E:\\note");
getAllFile(file); }
public static void getAllFile(File dir){
File[] files=dir.listFiles();
for (File f:files){
if(f.isDirectory()){
//判断是否是文件夹,如果是文件夹,则执行本身继续递归遍历
getAllFile(f);
}else{
//不是文件夹,则直接打印
//使用File对象的toSting方法,在使用字符串的endWith("字符串")判断结尾字符,返回布尔值的方法;
String s= f.toString();
//把字符串全部转换为小写的
s=s.toLowerCase();
boolean bool=s.endsWith(".md");
if(bool){
System.out.println(f);
}
//简洁写法
//链式编程
if(f.getName().toString().endsWith(".md")){
System.out.println(f);
}
}
}
}
}
/*Console结果
E:\note\Ajax.md
E:\note\api1.md
E:\note\API2.md
* */

2、基础知识复习

2.1 命令
//查看版本
javac -version
java -version
// 编译与执行
javac Xxxx.java
生成Xxxx.class
执行命令
java Xxxx
2.2常量

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

规范:所有字母大写

关键字:final

package com.two;

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

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

计算机存储单位

1位=8字节

1bit=8byte

分类:

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

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

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

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

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

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

    • 条件是转换的数据类型必须是兼容的。
    • 格式:(type)value type是要强制类型转换后的数据类型 实例:
    package com.two;
    public class Demo2 {
    public static void main(String[] args) {
    // 强制类型转换
    int i1 = 123;
    byte b = (byte)i1;//强制类型转换为byte
    System.out.println("int强制类型转换为byte后的值等于"+b);
    double d= (double)i1;
    System.out.println("int强制类型转换为double后的值等于"+d);
    }
    }
    /*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. SQL解析器详解

    1.概述 最近,有同学留言关于SQL解析器方面的问题,今天笔者就为大家分享一下SQL解析器方便的一些内容. 2.内容 2.1 SQL解析器是什么? SQL解析与优化是属于编辑器方面的知识,与C语言这类 ...

  2. 中文分词,自然语言处理器NLP。 六月份版本已上线。

    一,  没有对比,就没有伤害,我们分词的优势在哪里?走一波测试. 跑一下CaCl2,看看效果. 二   想要分什么词汇,自己自定义即可. 目前每个月都会出一个新的版本,主要是和金融相关的词汇. 这是6 ...

  3. ApacheCN PHP 译文集 20211101 更新

    PHP 入门指南 零.序言 一.PHP 入门 二.数组和循环 三.函数和类 四.数据操作 五.构建 PHP Web 应用 六.搭建 PHP 框架 七.认证与用户管理 八.建立联系人管理系统 使用 PH ...

  4. 「JOI 2015 Final」城墙

    「JOI 2015 Final」城墙 复杂度默认\(m=n\) 暴力 对于点\((i,j)\),记录\(ld[i][j]=min(向下延伸的长度,向右延伸的长度)\),\(rd[i][j]=min(向 ...

  5. Sublime Text 官方网站 http://www.sublimetext.com

    Sublime Text 官方网站 http://www.sublimetext.com

  6. Mysql Json函数之更新 (四)

    修改JSON值的函数 本节中的函数将修改JSON值并返回结果. JSON_APPEND(json_doc, path, val[, path, val] ...) 将值附加到JSON文档中指定数组的末 ...

  7. sublime中的emmet插件的使用技巧

    1.我要生成一个2行3列,宽300px,高500px的表. table[width=300 height=500]>(tr>td{$}*3)*2

  8. Java线程--CompletionService使用

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11871911.html Java线程--CompletionService使用 public ...

  9. 导航控制器跳转时隐藏底部tabbar

    - (void)setting { // 跳转到设置界面 XMGSettingViewController *settingVc = [[XMGSettingViewController alloc] ...

  10. 国产操作系统deepin安装与配置Node-RED环境

    1.1. 测试机配置清单 部件名称 版本号 备注 处理器 Intel Core i5 3320M 显卡 自带集显 内存 8G DDR3单通道 显示插口 VGA*1,HDML*1 1.2. 系统安装及配 ...