Java递归与基础复习
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递归与基础复习的更多相关文章
- Java基础复习笔记基本排序算法
Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...
- Java基础复习笔记系列 九 网络编程
Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...
- Java基础复习笔记系列 八 多线程编程
Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...
- Java基础复习笔记系列 七 IO操作
Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...
- Java基础复习笔记系列 五 常用类
Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...
- Java基础复习笔记系列 四 数组
Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...
- 2018.6.13 Java语言基础复习总结
Java语言基础与面向对象编程实践 第一章 初识Java 1.1机器语言 机器语言是指一台计算机全部的指令集合.机器语言室友0和1组成的二进制数,是一串串由0和1组成的指令序列,可将这些指令序列交给计 ...
- 《Java基础复习》-控制执行流程
最近任务太多了,肝哭我了,boom 参考书目:Thinking in Java <Java基础复习>-控制执行流程 Java使用了C的所有流程控制语句 涉及关键字:if-else.whil ...
- 《Java基础复习》—常识与入门
突然发现自己Java基础的底子不到位,复习! 所记知识会发布在CSDN与博客网站jirath.cn <Java基础复习>-常识与入门 一.Java语言的知识体系图 分为三部分 编程语言核心 ...
随机推荐
- 微前端框架 之 qiankun 从入门到源码分析
封面 简介 从 single-spa 的缺陷讲起 -> qiankun 是如何从框架层面解决 single-spa 存在的问题 -> qiankun 源码解读,带你全方位刨析 qianku ...
- LeetCode 每日一题 458. 可怜的小猪
题目描述 有 buckets 桶液体,其中 正好 有一桶含有毒药,其余装的都是水.它们从外观看起来都一样.为了弄清楚哪只水桶含有毒药,你可以喂一些猪喝,通过观察猪是否会死进行判断.不幸的是,你只有 m ...
- APC 篇——总结与提升
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...
- Java--这张线程瓜图保熟,不进来看看?这瓜要是不熟它就Dead掉了
先来看一下线程这张图线程的几种运行状态之间运行流程: 看不懂没关系,慢慢来学习,往下学习来继续了解一下~ 什么是线程? 线程是进程的一部分,是程序执行中的一条执行路线: 进程就是指程序在其自身地址空间 ...
- 对axios的理解
axios是基于promise的,可以使用promise api axios的请求方式 axios(config) axios.request(config) axios.get(url [,conf ...
- 在java中静态方法与非静态方法
在java中public void与public static void有什么区别 ? public void 修饰是非静态方法,该类方法属于对象,在对象初始化(new Object())后才能被调用 ...
- Swift循环的介绍
循环的介绍 在开发中经常会需要循环 常见的循环有:for/while/do while. 这里我们只介绍for/while,因为for/while最常见 for循环的写法 最常规写法 // 传统写法 ...
- IOS scrollView 图片浏览
// // ViewController.m // 0426 // // Created by apple on 15/4/26. // Copyright (c) 2015年 gense. All ...
- logback1.3.x配置详解与实践
前提 当前(2022-02前后)日志框架logback的最新版本1.3.0已经更新到1.3.0-alpha14版本,此版本为非stable版本,相对于最新稳定版1.2.10来说,虽然slf4j-api ...
- Solution -「CTS2019」珍珠
题目 luogu. 题解 先 % 兔.同为兔子为什么小粉兔辣么强qwq. 本文大体跟随小粉兔的题解的思路,并为像我一样多项式超 poor 的读者作了很详细的解释.如果题解界面公式出现问题,可以 ...